如何在 python docx 中垂直书写 table

How to write table vertically in python docx

我正在将数据导出到 Word Docx 我得到这样的结果

使用此代码

records = Model.objects.filter(pk=pk)

table = document.add_table(rows=1, cols=3)

hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'data1'
hdr_cells[1].text = 'data2'
hdr_cells[2].text = 'data3'

for record in records:
    row_cells = table.add_row().cells
    row_cells[0].text = record.data1
    row_cells[1].text = record.data2
    row_cells[2].text = record.data3

但我想要这样

我尝试了多种方法,但每次我都遇到错误,如果我添加 hdr_cells[3],我可能有超过 3 个数据,它会抛出 index out of range 错误。请问有人可以帮助解决这个问题吗?提前致谢!

一种方法是提取函数。您还需要根据查询结果形成 table 的维度:

def write_column(col, record):
    cells = column.cells
    for i, field in record:
        cells[i].text = field

records = Model.objects.filter(pk=pk)
table = document.add_table(rows=len(records[0]), cols=len(records))
for i, record in enumerate(records):
    write_column(table.columns[i], record)

您没有指定 record 对象的类型,所以我在这里假定为 list。您可能需要根据具体情况进行一些调整。

如果记录字段只能按属性名称(如 .data1.data2 等)使用,您需要包含或获取架构信息来进行映射,这可能会影响此代码对架构更改的灵活性(例如用于不止一种记录类型)。