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
相关产品推荐
相关产品推荐

