Таким образом, ширина столбца определяется шириной всех ячеек в одном столбце, например:
from docx import Document
from docx.shared import Cm
file = /path/to/file/
doc = Document(file)
table = doc.add_table(4,2)
for cell in table.columns[0].cells:
cell.width = Cm(1.85)
однако высота строки определяется с помощью строк, но я не могу вспомнить, как я это делал на прошлой неделе.
Теперь мне удалось найти способ ссылаться на строки в таблице, но, похоже, я не могу вернуться к этому способу. Можно изменить высоту с помощью метода add_row, но вы не можете создать таблицу без строк, поэтому верхняя строка всегда будет иметь высоту по умолчанию, которая составляет около 1,6 см.
Есть способ получить доступ к абзацам без использования add_paragraph, знает ли кто-нибудь, как получить доступ к строкам без использования метода add_row, потому что именно его я использовал для установки высоты строки в таблице по умолчанию.
Я пробовал это, но это не работает:
row = table.rows
row.height = Cm(0.7)
но хотя это не дает ошибки, это также не влияет на высоту.
table.rows
- это коллекция, в частности последовательность, поэтому вам нужно обращаться к каждой строке отдельно:
for row in table.rows:
row.height = Cm(0.7)
Также ознакомьтесь с row.height_rule
, чтобы узнать о некоторых связанных действиях, к которым у вас есть доступ:
https://python-docx.readthedocs.io/en/latest/api/table.html#row-objects
Когда вы назначаете table.rows.height
, он просто добавляет атрибут экземпляра .height
, который ничего не делает. Это один из побочных эффектов динамического языка, такого как Python, - вы сталкиваетесь с подобным загадочным поведением. Это уходит, когда вы набираетесь опыта, по крайней мере, для меня :)
Дополнительная информация: Ответ здесь правильный, но это даст минимальную высоту строки. Использование WD_ROW_HEIGHT_RULE.EXACTLY исправит высоту ячейки до установленной высоты строки, игнорируя содержимое ячейки, это может привести к обрезке текста нежелательным образом.
para = table.cell(0,0).add_paragrph('some text')
РЕШЕНИЕ: add_paragraph фактически добавляет пустую строку над текстом. Вместо этого используйте следующее, чтобы избежать использования add_paragraph:
table.cell(0,0).paragraphs[0].text = 'some text'
или использование add_run может упростить работу с текстом:
run = table.cell(0,0).paragraphs[0].add_run('some text')
run.bold = True
Спасибо, Сканни, так я и поступил в прошлый раз, я все еще изучаю ООП, поэтому иногда сложно определить, что к чему принадлежит.