Django导出EXCEL并确保表头左右两列显示

以下是导出EXCEL确保表头左右两列显示正确值的代码示例:

from openpyxl import Workbook
from openpyxl.styles import Alignment

# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active

# 模拟订单头信息(替换为您的实际数据获取方法)
order_header = {
    'od_no': 'SO001',
    'od_date': '2024-07-16',
    'cu_no': {'cu_name': '客户A'},
    'cu_bil': {'cu_name': '账款归属A'},
    'po_no': 'PO001',
    'pa_no': {'pa_name': '业务员A'},
    'sales_class': {'code': '内外销'},
    'checkout_no': {'code': '结账方式A'},
    'checkout_days': 30,
    'payment': {'code': '付款方式A'},
    'currency': {'code': 'USD'},
    'cny': 1.2,
    'tax': {'code': '税别A'},
    'vat': 0.15,
    'ts': {'code': '交易条件A'},
    'frt': {'code': '货运方式A'},
    'ship_to': {'cu_name': '收货方A'},
    'ship_address': {'cu_address': '收货地址A'},
    'od_amount': 1000.0,
    'od_taxAmount': 150.0,
    'rmk': '备注信息'
}

# 添加左侧表头信息
left_header = [
    ['销售订单单号', order_header['od_no']],
    ['单据时间', order_header['od_date']],
    ['客户', order_header['cu_no']['cu_name']],
    ['账款归属', order_header['cu_bil']['cu_name']],
    ['客户PO', order_header['po_no']],
    ['业务员', order_header['pa_no']['pa_name']],
    ['内外销别', order_header['sales_class']['code']],
    ['结账方式', order_header['checkout_no']['code']],
    ['结账天数', order_header['checkout_days']],
    ['付款方式', order_header['payment']['code']]
]

# 添加右侧表头信息
right_header = [
    ['交易货币', order_header['currency']['code']],
    ['汇率', order_header['cny']],
    ['税别', order_header['tax']['code']],
    ['税率', order_header['vat']],
    ['交易条件', order_header['ts']['code']],
    ['货运方式', order_header['frt']['code']],
    ['收货方', order_header['ship_to']['cu_name']],
    ['收货地址', order_header['ship_address']['cu_address']],
    ['总金额', order_header['od_amount']],
    ['总税额', order_header['od_taxAmount']],
    ['备注', order_header['rmk']]
]

# 添加左侧表头到工作表
for index, item in enumerate(left_header, start=1):
    ws.cell(row=index, column=1, value=item[0])
    ws.cell(row=index, column=2, value=item[1])
    ws.merge_cells(start_row=index, start_column=1, end_row=index, end_column=2)
    ws.cell(row=index, column=1).alignment = Alignment(horizontal='center')

# 添加右侧表头到工作表
for index, item in enumerate(right_header, start=1):
    ws.cell(row=index, column=3, value=item[0])
    ws.cell(row=index, column=4, value=item[1])
    ws.merge_cells(start_row=index, start_column=3, end_row=index, end_column=4)
    ws.cell(row=index, column=3).alignment = Alignment(horizontal='center')

# 保存工作簿到文件
wb.save('sales_order.xlsx')

在这段代码中:

  • order_header 模拟了订单头信息的字典结构,您需要根据实际情况从数据库或其他数据源中获取正确的订单头信息。
  • 使用 enumerate 函数来迭代 left_headerright_header 列表,并将每个值填充到对应的单元格中。
  • 每次迭代时,通过 ws.cell(row, column) 方法指定行和列来设置单元格的值,并使用 merge_cells 方法将左右两列的单元格合并。
  • 最后,保存工作簿到文件。

确保 order_header 中的字段和属性名称与您的实际数据模型一致,并根据需要进行调整。

posted @ 2024-07-17 11:49  侬侬发  阅读(4)  评论(0编辑  收藏  举报