django 如何用reportlab给表的某行添加列?

j1dl9f46  于 2023-02-17  发布在  Go
关注(0)|答案(1)|浏览(146)

几天来我一直在寻找替代品,但我找不到。
我粘贴了一段代码,在其中生成了一个包含问题和答案的表格,大多数行只有一列,但在特定情况下,我需要在同一行的多列中显示信息(可以是2、3、4列等)。
是否有任何方法可以将列添加到某些行?o指定每行的列数?或其他替代方法。
当然,谢谢你的帮助

def answer_data(self, style):
    answers = []
    style_bodytext = style['BodyText']
    for a in self._answers:
        question = Paragraph(a['question_code'] + " - " + a['question'], style_bodytext)
        answer_paragraph = Paragraph(self.serializer_answer(a['answers']), style_bodytext)
        answers.append([
            question
        ])
        answers.append([
            answer_paragraph
        ])
        try:
            table_dependent = []
            qs = []
            aws = []
            for d in a['dependent']:
                q = Paragraph(d['question_code'] + " - " + d['question'], style_bodytext)
                ans = Paragraph(self.serializer_answer(d['answers']), style_bodytext)
                qs.append(q)
                aws.append(ans)
            table_dependent.append(qs)
            table_dependent.append(aws)
            answers = answers + table_dependent
        except KeyError:
            pass
    table = Table(answers, colWidths=18 * cm)
    table.setStyle([
        ("BOX", (0, 0), (-1, -1), 0.25, colors.black),
        ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),
        ('ALIGN', (0, 0), (-1, -1), 'LEFT'),
    ])
    for each in range(len(answers)):
        bg_color = colors.white
        if each % 2 == 0:
            bg_color = colors.lightgrey
        table.setStyle(TableStyle([
            ('BACKGROUND', (0, each), (-1, each), bg_color)
        ]))
    return table
5uzkadbs

5uzkadbs1#

您可以使用SPAN表格样式来定义某些列的列跨度,但是您需要事先迭代数据,因为您必须计算出最大列数,并且必须为要合并的列提供空字符串。
official documentation中有一个例子第八十八页:

data=  [['Top\nLeft', '', '02', '03', '04'],
    ['', '', '12', '13', '14'],
    ['20', '21', '22', 'Bottom\nRight', ''],
    ['30', '31', '32', '', '']]
t = Table(data,style=[
    ('GRID',(0,0),(-1,-1),0.5,colors.grey),
    ('BACKGROUND',(0,0),(1,1),colors.palegreen), 
    ('SPAN',(0,0),(1,1)),
    ('BACKGROUND',(-2,-2),(-1,-1), colors.pink),
    ('SPAN',(-2,-2),(-1,-1)),                ])

输出:

文件:
表格样式范围命令
我们的Table类支持spanning的概念,但它的指定方式与html不同。

SPAN, (sc,sr), (ec,er)

指示列sc-ec和行sr-er中的单元格应合并为超级单元格,其内容由单元格(sc,sr)确定。其他单元格应存在,但应包含空字符串,否则可能会得到意外结果。
另一种可能性是使用嵌套表,例如,您坚持单列概念,如果您在一行中有多个列,您可以创建一个表,而不仅仅是Paragraph。然而,这有一个缺点,即您不能在所有列上都有列标题。

相关问题