You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XlsxWriter write/write_datetime参数过多报错,如何添加自定义格式?

问题原因与修正方案

1. 错误原因分析

  • worksheet.write()参数冗余:你错误地将set_column的返回值(该方法无实际返回值,变量column_width为None)传入write方法,而write的正确参数签名是write(row, col, value[, format]),不需要列宽参数。
  • worksheet.write_datetime()格式参数冲突:XlsxWriter的单元格只能绑定一个Format对象,不能同时传入两个格式参数(日期格式+边框格式),需将两种格式属性合并到同一个Format实例中。

2. 修正后的完整代码

def export_callcenter_26older_not_bg(self, file_name, sheet_name):
    workbook = xlsxwriter.Workbook(file_name + '.xlsx')
    worksheet = workbook.add_worksheet(sheet_name)

    header, rows = DataForExport().callcenter_26older_not_bg()

    # 定义表头和内容单元格格式
    header_cell_format = workbook.add_format({'bold': True, 'border': True, 'bg_color': 'yellow'})
    body_cell_format = workbook.add_format({'border': True})
    # 合并日期格式与内容边框格式
    date_body_format = workbook.add_format({'num_format': 'dd/mm/yyyy', 'border': True})

    # 设置列宽:set_column无返回值,无需赋值给变量;列索引从0开始覆盖所有表头列
    last_col = len(header) - 1
    worksheet.set_column(0, last_col, 11)

    # 写入表头
    row_index = 0
    for column_index, column_name in enumerate(header):
        worksheet.write(row_index, column_index, column_name, header_cell_format)

    # 写入数据行
    for row_index, row in enumerate(rows, 1):
        for column_index, column in enumerate(row):
            if isinstance(column, datetime.date):
                worksheet.write_datetime(row_index, column_index, column, date_body_format)
            else:
                worksheet.write(row_index, column_index, column, body_cell_format)

    print(f'{len(rows)} rows written successfully to {workbook.filename}')
    workbook.close()

3. 关键修改点说明

  • 表头写入修正:删除write方法中的column_width参数,仅保留行索引、列索引、表头文本、表头格式四个参数,匹配write方法的参数要求。
  • 日期格式合并:新增date_body_format,同时包含日期显示格式和边框属性,替代原代码中同时传入两个格式参数的错误写法。
  • 列宽设置优化:修正set_column的起始列索引为0(覆盖所有表头列),且该方法无返回值,无需赋值给变量。

内容的提问来源于stack exchange,提问作者LeXIkA333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:06:42