样式reportlab表

时间:2019-01-21 09:12:40

标签: python reportlab

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)

因此,我想重复样式,例如“名称”在第一行中,并且也在第50或第100行中,而我也想为他们提供相同的样式,那么我该怎么做?

2 个答案:

答案 0 :(得分:1)

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

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)

这将为您提到的特定单元格上色。而且,如果您要为值的下一行或单元格上色,则只需进行加法运算,就可以将行和列互换以与它们一起使用以检查其工作原理。

答案 1 :(得分:0)

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

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