ERP/create_shipments_template.py

108 lines
3.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""
创建发货记录 Excel 模板文件
"""
import pandas as pd
from datetime import datetime, timedelta
def create_template():
"""创建发货记录模板文件(带合并单元格)"""
import openpyxl
from openpyxl.styles import Alignment, Font, Border, Side
# 创建工作簿
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "发货记录"
# 创建表头
headers = ['出货日期', '箱号']
headers.extend([f'SN{i}' for i in range(1, 21)])
ws.append(headers)
# 设置表头样式
for cell in ws[1]:
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal='center', vertical='center')
# 创建示例数据
base_date = datetime.now()
row_num = 2
# 每个日期3个箱子
for day in range(3):
date = (base_date + timedelta(days=day)).strftime('%Y-%m-%d')
start_row = row_num
# 每天3个箱子
for box in range(3):
box_num = f"BOX{day*3+box+1:03d}"
# 第一列:日期(只在第一行写入,后面会合并)
if box == 0:
ws.cell(row=row_num, column=1, value=date)
# 第二列:箱号
ws.cell(row=row_num, column=2, value=box_num)
# SN1-SN20
for sn_idx in range(1, 21):
sn_value = f"SN{(day*3+box)*20+sn_idx:04d}" if sn_idx <= 15 else ''
ws.cell(row=row_num, column=2+sn_idx, value=sn_value)
row_num += 1
# 合并日期单元格
if start_row < row_num - 1:
ws.merge_cells(f'A{start_row}:A{row_num-1}')
# 设置合并单元格的对齐方式
ws.cell(row=start_row, column=1).alignment = Alignment(horizontal='center', vertical='center')
# 调整列宽
ws.column_dimensions['A'].width = 12
ws.column_dimensions['B'].width = 10
for i in range(3, 23):
ws.column_dimensions[openpyxl.utils.get_column_letter(i)].width = 10
# 保存文件
output_file = 'shipments_template.xlsx'
wb.save(output_file)
print(f"✓ 模板文件已创建:{output_file}")
print(f" - 包含 {row_num-2} 行示例数据")
print(f" - 列出货日期合并单元格、箱号、SN1-SN20")
print(f" - 每个日期包含 3 个箱子")
return output_file
def create_empty_template():
"""创建空白模板文件"""
# 创建列头
columns = ['出货日期', '箱号']
columns.extend([f'SN{i}' for i in range(1, 21)])
# 创建空 DataFrame
df = pd.DataFrame(columns=columns)
# 保存为 Excel
output_file = 'shipments_template_empty.xlsx'
df.to_excel(output_file, index=False, engine='openpyxl')
print(f"✓ 空白模板文件已创建:{output_file}")
return output_file
if __name__ == '__main__':
print("创建发货记录 Excel 模板...\n")
# 创建带示例数据的模板
create_template()
print()
# 创建空白模板
create_empty_template()
print()
print("完成!您可以使用这些模板文件进行测试。")