样式报告实验室 table

Style reportlab table

conn = sqlite3.connect('abc.db')
cursor = conn.execute('''ac''')

column1Heading = "a"
column2Heading = "b"
column3Heading = "c"
column4Heading= "d"
column5Heading = "e"
column6Heading = "f"

data=[]
for row in cursor:
    D=str(row[0])
    t=str(row[1])
    C=str(row[2])
    ca = str(row[3]).split(',')
    cm = str(row[4]).split(',')
    data.append([column1Heading,D])
    data.append([column2Heading,t])
    data.append([column4Heading,len(c)])
    if len(ca) is not 0:
        data.append([column3Heading,column5Heading,column6Heading])
    for i in range(len(cm)):
        Ca=str(ca[i])
        Cl=str(cm[i])
        data.append([C,Ca,Cm])


style=[
 ('GRID',(0,0),(-1,-1),0.5,colors.gray),
 ('ALIGN',(0,1),(-1,-1),'CENTER'),
 ('SPAN',(0,0),(-1,0))
]


s = getSampleStyleSheet()
s = s["Normal"]
s.alignment=TA_CENTER
s.wordWrap = 'CJK'
t=Table(data)
t.setStyle(TableStyle(style))
Story.append(t)

所以我想重复样式,例如,如果 "name" 位于第一行,它也在第 50 或第 100 行,我也想为它们提供相同的样式,那么我必须做什么?

如果您提供一个图形示例,可能会更容易理解目标。 尽管如此,我将尝试通过解释您的问题来理解,例如:-如何在事先不知道行元素将包含多少行的情况下自动设置行元素的样式。

A​​:第

部分
style=[
 ('GRID',(0,0),(-1,-1),0.5,colors.gray),
 ('ALIGN',(0,1),(-1,-1),'CENTER'),
 ('SPAN',(0,0),(-1,0))
]

实际上可以变得更加复杂。上面的快捷方式(使用-1)将应用于所有行(或列),但是,其中的数字实际上可以替换为行号或列号,这是一个坐标系。然后你只需要创建一个变量来首先测量你的输入数据并将这个变量放入样式部分。

首先请参阅用户指南的第 87 页https://www.reportlab.com/docs/reportlab-userguide.pdf

大多数人不理解我的问题,因为我认为我的问题不合适,但我找到了问题的答案,我想分享它以便其他人可以利用它。因此,假设您有数百行和数百列,并且您想要根据其值为特定行着色。

style=[]

style.append(['GRID',(0,0),(-1,-1),colors.black])
for row, values in enumerate(data):
   for colum, value in enumerate(values):
       if value == "Fruit":
           style.append('BACKGROUND',(column,row),(column,row),colors.red)

这将为您提到的特定单元格着色。如果你想给值的下一行或下一个单元格着色,那么只需进行加法操作,你可以交换行和列来测试它们是如何工作的。

有一个方法:TableStyle.add(CommandSequence)。 我做了一个例子,当有条件时背景为红色。

我在 ReportLab PDF Library User Guide 第 85 页找到了信息。

示例:

from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

doc = SimpleDocTemplate("simple_table.pdf", pagesize=letter)
# container for the 'Flowable' objects
elements = []

data= [['00', '01', '02', '03', '04'],
['10', '11', '12', '13', '14'],
['20', '21', '22', '23', '24'],
['30', '31', '32', '33', '34']]
t=Table(data)
tabla_style = TableStyle([
    ('BACKGROUND',(1,1),(-2,-2),colors.green),
    ('TEXTCOLOR',(0,0),(1,-1),colors.red),
    ('INNERGRID',(0,0),(-1,-1),0.25,colors.red),
    ('BOX',(0,0),(-1,-1),0.25,colors.red),
])

for row, values in enumerate(data):
   for column, value in enumerate(values):
       print(column, value)
       if value == "22" or value =="24":
           tabla_style.add('BACKGROUND',(column,row),(column,row),colors.red)

t.setStyle(tabla_style)
elements.append(t)
# write the document to disk
doc.build(elements)