Python-docx, как установить ширину ячейки в таблицах?
Как установить ширину ячейки в таблицах?, до сих пор я получил:
from docx import Document
from docx.shared import Cm, Inches
document = Document()
table = document.add_table(rows=2, cols=2)
table.style = 'TableGrid' #single lines in all cells
table.autofit = False
col = table.columns[0]
col.width=Inches(0.5)
#col.width=Cm(1.0)
#col.width=360000 #=1cm
document.save('test.docx')
Не важно, какое количество или единицы я установил в col.width, его ширина не меняется.
6 ответов
Краткий ответ: установите ширину ячейки индивидуально.
for cell in table_columns[0].cells:
cell.width = Inches(0.5)
python-docx
делает то, что вы говорите, когда вы устанавливаете ширину столбца. Проблема в том, что Word игнорирует это. Другие клиенты, такие как LibreOffice, уважают настройку ширины столбца.
.docx
файл в формате XML (отсюда и суффикс "x" в расширении файла). В словаре XML для таблиц есть место для ширины столбца и место для ширины ячейки. Кто обращает внимание на то, что немного раздражает, когда дело доходит до этой детали. Один общий знаменатель заключается в том, что каждый соблюдает явную ширину, установленную на уровне отдельной ячейки. Это не имеет большого смысла для меня, но это то, что нужно, чтобы заставить его работать. Возможно, имеет смысл иметь функцию в вашей программе, которая заботится о деталях:
def set_col_widths(table):
widths = (Inches(1), Inches(2), Inches(1.5))
for row in table.rows:
for idx, width in enumerate(widths):
row.cells[idx].width = width
Это становится немного сложнее, если в вашей таблице есть объединенные ячейки, что может быть причиной того, что Word игнорирует ширину столбцов; они неоднозначны в определенных ситуациях с объединенными ячейками.
Для LibreOffice нужно было установить:
table.autofit = False
table.allow_autofit = False
Затем установите заданный столбец и ширину ячейки
table.columns[0].width = Inches(1.0)
table.rows[0].cells[0].width = Inches(1.0)
Атрибут allow_autofit по умолчанию имеет значение True, что означает, что установленная ширина не вступит в силу, поэтому: table.allow_autofit = False
Попробуй это. Этот код работал для меня.
table2.cell(0,0).width = Inches(1.0)
table2.cell(0,1).width = Inches(1.0)
table = documento.add_table(rows=1, cols=3, style="Table Grid")table.alignment = WD_ALIGN_PARAGRAPH.CENTER
table.allow_autofit = True
table.columns[0].width = Cm(3.5)
table.columns[1].width = Cm(7.5)
table.columns[2].width = Cm(5.5)
Вы также можете использовать WD_ROW_HEIGHT_RULE , он может обойти автоподбор из таблицы.
for row in table.rows:
row.height_rule = WD_ROW_HEIGHT_RULE.EXACTLY
Если нужно, вот документ .