我正在使用python模块reportlab创建一个表。在此表中,我想循环并具有不同的背景颜色,具体取决于任何特定单元格的值。
为此,我想出了以下内容:
elements = []
table1 = [[34,27,35,35],
[3,76,23,157],
[13,137,15,75],
[56,26,46,26]]
t1 = Table(table1)
for ii in range(len(table1)):
for jj in range(len(table1)):
if table1[ii][jj] <=50:
ourcolor = colors.white
elif table1[ii][jj] <=100:
ourcolor = colors.skyblue
elif table1[ii][jj] <=200:
ourcolor = colors.green
else:
ourcolor = colors.white
t1.setStyle(TableStyle([('BACKGROUND', (ii,jj), (ii,jj), ourcolor),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
('BOX', (0,0), (-1,-1), 0.25, colors.black)
]))
elements.append(t1)
但是,许多细胞仍未着色,其中许多细胞染色不正确,但其中一些是正确的。我假设我的循环出了问题,因为我不是一个非常有经验的程序员。
非常感谢任何帮助或想法。
答案 0 :(得分:3)
我对ReportLab的了解还不够清楚,但这种编码的一个常见问题是轴是交换的。例如,像这样建立索引:table1[ii][jj]
表示ii
是y轴(行),jj
是x轴(列),因此您必须提供x和y将ReportLab改为jj, ii
。检查输出是否在着色单元格时交换了行和列。
另外,请注意您的双循环在两个相同的范围内循环,这只是因为您的表是方形的。如果你的表格甚至变成非正方形,那么你的一个循环就会出现错误的范围。
答案 1 :(得分:2)
看起来table1只是一个列表列表。我认为这段代码会按照您的意愿执行,假设问题出在您的循环中,而不是在reportlab模块中(我没有经验)。
a=-1
for ii in table1:
a = a+1
b = -1
for jj in ii:
b = b+1
if jj <=50:
ourcolor = colors.white
elif jj <=100:
ourcolor = colors.skyblue
elif jj <=200:
ourcolor = colors.green
else:
ourcolor = colors.white
t1.setStyle(TableStyle([('BACKGROUND', (a,b), (a,b), ourcolor),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
('BOX', (0,0), (-1,-1), 0.25, colors.black)
]))