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

使用Pandas和XlsxWriter时merge_range的add_format部分格式不生效问题求助

Pandas + XlsxWriter 合并单元格格式部分失效的问题排查

我正尝试使用Pandas和XlsxWriter为Excel文件添加标题,但worksheet.merge_range的merge_format未达到预期效果。相关代码如下:

df = pd.DataFrame.from_records(pd.json_normalize(data))
writer = pd.ExcelWriter("teste12.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name=nome_tabela, index=False, startcol=0, startrow=5)
workbook = xlsxwriter.Workbook(writer)
merge_format = workbook.add_format()
merge_format.set_border(True)
merge_format.set_bold(True)
merge_format.set_align("center")
merge_format.set_align("vcenter")
merge_format.set_font_size(20)
worksheet = writer.sheets[nome_tabela]
worksheet.merge_range(0,0,3,6,"Test", merge_format)
writer.save()

我也尝试按照文档示例设置merge_format:

merge_format = workbook.add_format({
    'bold': 1,
    'border': 1,
    'align': 'center',
    'valign': 'vcenter',
    'fg_color': 'yellow',
    'font_size' : 20
})

在这两种设置方式中,bold、border和align格式均正常生效,但font_size、valign和fg_color格式无法生效。请问我哪里操作出错了?


问题根源

你踩了一个很容易忽略的小坑:重复创建了Workbook对象!

当你用pd.ExcelWriter(..., engine='xlsxwriter')创建writer时,内部已经自动初始化了一个XlsxWriter的Workbook实例。但你之后又手动调用workbook = xlsxwriter.Workbook(writer)新建了一个独立的Workbook对象——你在这个新对象上定义的格式,和writer实际用来生成Excel的Workbook根本不是同一个。这就是为什么部分格式看似生效(其实是和Excel默认样式巧合重合),而font_size、valign这类需要精确绑定的设置完全失效的原因。

修正后的代码

只需要从writer中获取已存在的Workbook实例即可,不用手动新建:

import pandas as pd

# 假设data和nome_tabela已提前定义
df = pd.DataFrame.from_records(pd.json_normalize(data))
writer = pd.ExcelWriter("teste12.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name=nome_tabela, index=False, startcol=0, startrow=5)

# 从writer中获取已创建的workbook,而非手动新建
workbook = writer.book
# 字典方式定义格式更简洁,两种设置格式的方式都可以使用
merge_format = workbook.add_format({
    'bold': 1,
    'border': 1,
    'align': 'center',
    'valign': 'vcenter',
    'fg_color': 'yellow',
    'font_size': 20
})

worksheet = writer.sheets[nome_tabela]
worksheet.merge_range(0, 0, 3, 6, "Test", merge_format)

writer.save()

额外注意点

  • 垂直对齐的参数在字典格式中是'valign',对应方法调用的set_align('vcenter')是正确的,两者要对应上
  • 后续如果要添加图表、其他单元格格式等,都要通过writer.book获取Workbook实例,不要手动新建
  • 调用writer.save()前,确保所有格式、内容都绑定到了writer关联的Workbook和Worksheet上

内容的提问来源于stack exchange,提问作者Felipe Colussi-oliva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 02:59:06