如何在 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
等)使用,您需要包含或获取架构信息来进行映射,这可能会影响此代码对架构更改的灵活性(例如用于不止一种记录类型)。
我正在将数据导出到 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
等)使用,您需要包含或获取架构信息来进行映射,这可能会影响此代码对架构更改的灵活性(例如用于不止一种记录类型)。