设置报告实验室表的样式


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 行,我也想为它们提供相同的样式,那么我该怎么办?

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

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库用户指南第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)

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

答:部分

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

最新更新