增加序号,配置导出,导入,求和采集数据导出
This commit is contained in:
@@ -474,7 +474,8 @@ def generate_daily_report(config_id, start_time=None, end_time=None):
|
||||
has_supplement=has_supplement,
|
||||
show_monthly_total=config.get('show_monthly_total', 0) == 1,
|
||||
config_id=config['id'],
|
||||
report_date=start_time.strftime('%Y-%m-%d')
|
||||
report_date=start_time.strftime('%Y-%m-%d'),
|
||||
sort_order=config.get('sort_order')
|
||||
)
|
||||
|
||||
print(f"[日报生成] Excel文件已生成: {file_path}")
|
||||
@@ -564,7 +565,7 @@ def generate_daily_report(config_id, start_time=None, end_time=None):
|
||||
def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
config_name, split_name, start_time, end_time,
|
||||
id_name_maps=None, field_custom_names=None, has_supplement=False,
|
||||
show_monthly_total=False, config_id=None, report_date=None):
|
||||
show_monthly_total=False, config_id=None, report_date=None, sort_order=None):
|
||||
"""
|
||||
生成Excel文件
|
||||
|
||||
@@ -585,7 +586,7 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
reports_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'public', 'reports')
|
||||
os.makedirs(reports_dir, exist_ok=True)
|
||||
|
||||
# 生成文件名 - 格式:配置名称_几月几日消费记录.xlsx
|
||||
# 生成文件名 - 格式:序号_配置名称_几月几日消费记录.xlsx
|
||||
# 从 start_time 提取日期(报表数据对应的是开始时间那天的数据)
|
||||
try:
|
||||
start_dt = datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S')
|
||||
@@ -595,7 +596,13 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
|
||||
# 如果有补单,添加标记
|
||||
supplement_suffix = '_有补单' if has_supplement else ''
|
||||
filename = f'{config_name}_{date_str}消费记录{supplement_suffix}.xlsx'
|
||||
|
||||
# 顺序号前缀(两位数字,不足补零)
|
||||
sort_prefix = ''
|
||||
if sort_order:
|
||||
sort_prefix = f'{sort_order:02d}_'
|
||||
|
||||
filename = f'{sort_prefix}{config_name}_{date_str}消费记录{supplement_suffix}.xlsx'
|
||||
file_path = os.path.join(reports_dir, filename)
|
||||
|
||||
# 创建工作簿
|
||||
@@ -668,7 +675,15 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
decimal3_fields = numeric_fields
|
||||
|
||||
# 写入表头
|
||||
for col_idx, field in enumerate(selected_fields, 1):
|
||||
# 第1列:序号
|
||||
cell = ws.cell(row=header_row, column=1)
|
||||
cell.value = '序号'
|
||||
cell.font = header_font
|
||||
cell.fill = header_fill
|
||||
cell.alignment = header_alignment
|
||||
cell.border = thin_border
|
||||
|
||||
for col_idx, field in enumerate(selected_fields, 2):
|
||||
cell = ws.cell(row=header_row, column=col_idx)
|
||||
if field in field_custom_names and field_custom_names[field]:
|
||||
display_name = field_custom_names[field]
|
||||
@@ -688,7 +703,17 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
data_start_row = header_row + 1
|
||||
for row_idx, order in enumerate(orders, data_start_row):
|
||||
is_even = (row_idx - data_start_row) % 2 == 1
|
||||
for col_idx, field in enumerate(selected_fields, 1):
|
||||
|
||||
# 第1列:序号
|
||||
seq_num = row_idx - data_start_row + 1
|
||||
seq_cell = ws.cell(row=row_idx, column=1)
|
||||
seq_cell.value = seq_num
|
||||
seq_cell.border = thin_border
|
||||
seq_cell.alignment = Alignment(horizontal='center', vertical='center')
|
||||
if is_even:
|
||||
seq_cell.fill = even_row_fill
|
||||
|
||||
for col_idx, field in enumerate(selected_fields, 2):
|
||||
cell = ws.cell(row=row_idx, column=col_idx)
|
||||
value = order.get(field, '')
|
||||
|
||||
@@ -734,7 +759,7 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
ws.cell(row=sum_row, column=1).alignment = Alignment(horizontal='center', vertical='center')
|
||||
ws.cell(row=sum_row, column=1).border = thin_border
|
||||
|
||||
for col_idx, field in enumerate(selected_fields, 1):
|
||||
for col_idx, field in enumerate(selected_fields, 2):
|
||||
cell = ws.cell(row=sum_row, column=col_idx)
|
||||
cell.fill = sum_fill
|
||||
cell.border = thin_border
|
||||
@@ -767,9 +792,9 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
# 月度总计行(在合计行下面空一行)
|
||||
monthly_row = sum_row + 2 if sum_fields else sum_row + 1
|
||||
|
||||
# 找 charge_degree 字段所在的列
|
||||
# 找 charge_degree 字段所在的列(+1因为序号占了第1列)
|
||||
charge_degree_col = None
|
||||
for col_idx, field in enumerate(selected_fields, 1):
|
||||
for col_idx, field in enumerate(selected_fields, 2):
|
||||
if field == 'charge_degree':
|
||||
charge_degree_col = col_idx
|
||||
break
|
||||
@@ -782,7 +807,7 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
ws.cell(row=monthly_row, column=1).border = thin_border
|
||||
|
||||
# 其他列也填充背景色
|
||||
for col_idx in range(2, len(selected_fields) + 1):
|
||||
for col_idx in range(2, len(selected_fields) + 2):
|
||||
cell = ws.cell(row=monthly_row, column=col_idx)
|
||||
cell.fill = monthly_fill
|
||||
cell.border = thin_border
|
||||
@@ -799,7 +824,11 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
|
||||
print(f"[日报生成] 写入月度总计时出错: {e}")
|
||||
|
||||
# 调整列宽(中文按2个字符宽度计算)
|
||||
for col_idx, field in enumerate(selected_fields, 1):
|
||||
# 序号列固定宽度
|
||||
from openpyxl.utils import get_column_letter
|
||||
ws.column_dimensions['A'].width = 8
|
||||
|
||||
for col_idx, field in enumerate(selected_fields, 2):
|
||||
header_name = get_field_display_name(field)
|
||||
if field in field_custom_names and field_custom_names[field]:
|
||||
header_name = field_custom_names[field]
|
||||
|
||||
Reference in New Issue
Block a user