You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python XlsxWriter无法修改Excel字体颜色,遇XML错误求解决

解决XlsxWriter条件格式不生效及XML错误问题

咱们来拆解下你代码里的几个关键问题,这些就是导致格式没效果、Excel报XML错误的根源:

问题分析

  • 格式对象未初始化:你直接调用cell_format.set_font_color,但没先通过workb.add_format()创建格式对象,这会导致格式没正确绑定到工作簿,进而引发XML结构错误。
  • 条件逻辑完全颠倒:你把红色格式套在了“Data Matched!”的匹配规则上,和需求完全相反,还漏掉了“Data Not Matched!”的格式设置。
  • 循环内重复添加条件格式:你在写数据的循环里反复执行conditional_format,会给同一单元格范围重复添加相同规则,导致Excel的XML结构混乱,出现恢复提示。
  • 字符串匹配语法错误:XlsxWriter的条件格式中,匹配字符串时需要用双引号包裹值(Excel公式里字符串必须加引号),否则无法正确识别目标内容。

修正后的完整代码

import xlsxwriter

alldata = [
    ['My Total', 'Data Matched!', '$824,499,658', '$824,499,658'],
    ['Second Total', 'Data Matched!', '$824,532,682.20', '$824,532,682.20'],
    ['Featured Articles', 'Data Matched!', '$391,153,610.55', '$391,153,610.55'],
    ['Ads Revenue', 'Data Not Matched!', '$825,513,740.17', '$825,582,419.92'],
    ['Company 1 Revenue', 'Data Not Matched!', '$824,765,286.03', '$824,833,965.78'],
    ['Company 2 Revenue', 'Data Not Matched!', '$176,767,751.61', '$239,939,801.89']
]

workb = xlsxwriter.Workbook('Newexcel1.xlsx')
worksheet1 = workb.add_worksheet("Sheet 1")

# 分别创建绿色、红色的格式对象
matched_format = workb.add_format({'font_color': 'green'})
not_matched_format = workb.add_format({'font_color': 'red'})

# 批量写入数据
for row, row_data in enumerate(alldata):
    worksheet1.write_row(row + 1, 1, row_data)

# 给"Data Matched!"设置绿色格式
worksheet1.conditional_format('C2:C7', {
    'type': 'cell',
    'criteria': '==',
    'value': '"Data Matched!"',  # 字符串必须用双引号包裹
    'format': matched_format
})

# 给"Data Not Matched!"设置红色格式
worksheet1.conditional_format('C2:C7', {
    'type': 'cell',
    'criteria': '==',
    'value': '"Data Not Matched!"',
    'format': not_matched_format
})

# 必须关闭工作簿,确保所有内容写入完成
workb.close()

关键修正点说明

  1. 初始化格式对象:通过workb.add_format()创建独立的格式,确保格式和工作簿正确关联,避免XML结构错误。
  2. 拆分条件规则:为两种文本分别设置条件格式,逻辑清晰,完全匹配你的需求。
  3. 修正字符串匹配语法:在value里用双引号包裹目标字符串(比如'"Data Matched!"'),遵循Excel公式的字符串标识规则。
  4. 移出循环的条件格式调用:把条件格式设置放在循环外,避免重复添加规则导致XML混乱。
  5. 强制关闭工作簿:最后调用workb.close()是XlsxWriter写入文件的必要步骤,缺失可能导致文件损坏。

这样修改后,生成的Excel就不会有XML错误,“Data Matched!”会显示绿色,“Data Not Matched!”会显示红色啦。

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

火山引擎 最新活动