使用ReportLab

时间:2018-02-27 18:23:45

标签: python-3.x reportlab

我使用ReportLab创建了一个表。我想有条件地为细胞着色,这取决于它们的含量(在我的情况下,我希望负数为红色)。要清楚,我有条件代码工作,我无法弄清楚如何添加颜色。我尝试了什么:

  • 使用<font color="...">标记。相反,标签在输出中逐字包含。
  • 将每个单元格包裹在Paragraph(...)中(this answer中建议)。在这种情况下,单元格文本将在每个字母后面进行换行。
  • 将表格包裹在Paragraph(...)中。在这种情况下, reportlab 出错(我相信产生的错误是TypeError: split() missing required positional argument: 'availHeight'
  • 我在 reportlab 源代码中找到reportlab.platypus.tables.CellStyle,但无法弄清楚是否使用它。谷歌没有任何用处,而且 reportlab 文档中没有提到它。
  • 我猜可以使用TableStyle(...)规则,但是单元格不在表格中的预定位置(这是所有示例所假设的)。

帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

使用import random from reportlab.lib.pagesizes import letter from reportlab.lib.colors import red from reportlab.platypus import SimpleDocTemplate, Table, TableStyle # Generate random data with positive and negative values as list of lists. data = [] for _ in range(20): data.append(random.sample(range(-10, 10), 5)) table_style = TableStyle([('ALIGN', (0, 0), (-1, -1), 'RIGHT')]) # Loop through list of lists creating styles for cells with negative value. for row, values, in enumerate(data): for column, value in enumerate(values): if value < 0: table_style.add('TEXTCOLOR', (column, row), (column, row), red) table = Table(data) table.setStyle(table_style) pdf = SimpleDocTemplate('example.pdf', pagesize=letter) pdf.build([table]) 是一种可接受的解决方案。您可以遍历数据并在满足条件时添加样式命令。

以下是一个例子:

mutate / gsub