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

如何在FPDF中通过IF语句为表格值为No的单元格设置背景色?

解决FPDF表格中指定单元格添加背景色的问题

你的代码存在两个核心问题:

  • 列名引用错误:列名包含空格时,不能用df.Column B的方式引用,必须改用df['Column B']的索引形式。
  • 逻辑判断错误:df['Column B'].any() == "No"是判断整列是否存在至少一个"No",并非逐个单元格判断;而且你直接输出固定文本'No',没有结合DataFrame中的实际数据行进行遍历渲染。

正确实现思路

需要遍历DataFrame的每一行,针对Column B的每个单元格内容进行判断:

  1. 初始化PDF对象并设置基础样式(字体、页面等)。
  2. 绘制表格表头。
  3. 逐行遍历数据,对Column B的值做判断:若为"No",则设置填充色后绘制单元格,绘制完成后重置填充色避免影响后续单元格;否则直接绘制默认样式的单元格。

完整示例代码

from fpdf import FPDF
import pandas as pd

# 初始化测试数据
df = pd.DataFrame({
    'Column A': ['Yes', 'Yes', 'No'],
    'Column B': ['No', 'Yes', 'No']
})

# 创建PDF实例
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)

# 绘制表头
pdf.cell(30, 10, 'Column A', 1, 0, 'C')
pdf.cell(30, 10, 'Column B', 1, 1, 'C')

# 遍历数据行并绘制表格
for _, row in df.iterrows():
    # 绘制Column A单元格
    pdf.cell(30, 10, row['Column A'], 1, 0, 'C')
    
    # 处理Column B单元格的背景色逻辑
    if row['Column B'] == 'No':
        pdf.set_fill_color(193, 229, 252)  # 设置浅蓝填充色
        # fill=True参数启用填充
        pdf.cell(30, 10, row['Column B'], 1, 1, 'C', fill=True)
        pdf.set_fill_color(255, 255, 255)  # 重置填充色为白色
    else:
        pdf.cell(30, 10, row['Column B'], 1, 1, 'C')

# 输出PDF文件
pdf.output("colored_table.pdf")

关键注意事项

  • 列名含特殊字符(如空格)时,必须使用df['列名']的索引方式访问。
  • 绘制带填充色的单元格后,务必重置填充色为默认值(如白色),否则后续所有单元格都会沿用该填充色。
  • cell方法的最后一个参数fill必须设为True,才会应用设置的填充颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:55:23