Как написать таблицу вертикально в python DOCX - PullRequest
0 голосов
/ 17 марта 2020

Я экспортирую данные в Word Docx. Я получаю такой результат

enter image description here

с этим кодом

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

но я хочу, чтобы это было так

enter image description here

Я пробовал несколько способов, но каждый раз, когда я получаю ошибку, и у меня может быть больше чем 3 данных, если я добавлю hdr_cells[3], он выдаст ошибку index out of range. пожалуйста, кто-нибудь может помочь в этом вопросе? Заранее спасибо!

1 Ответ

0 голосов
/ 17 марта 2020

Один из способов - извлечь функцию. Вам также необходимо сформировать размеры таблицы из результата запроса:

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, поэтому я принял список здесь. Вам могут потребоваться некоторые корректировки в зависимости от специфики.

Если поля записи доступны только по имени атрибута (например, .data1, .data2 и т. Д. c.), Вам необходимо включить или получить информация о схеме для создания этого сопоставления, которая может повлиять на гибкость этого кода в отношении изменений схемы (например, при использовании для нескольких типов записей).

...