Например, у меня есть общий скрипт, который выводит стили таблиц по умолчанию, используя python-docx (этот код работает нормально):
import docx
d=docx.Document()
type_of_table=docx.enum.style.WD_STYLE_TYPE.TABLE
list_table=[['header1','header2'],['cell1','cell2'],['cell3','cell4']]
numcols=max(map(len,list_table))
numrows=len(list_table)
styles=(s for s in d.styles if s.type==type_of_table)
for stylenum,style in enumerate(styles,start=1):
label=d.add_paragraph('{}) {}'.format(stylenum,style.name))
label.paragraph_format.keep_with_next=True
label.paragraph_format.space_before=docx.shared.Pt(18)
label.paragraph_format.space_after=docx.shared.Pt(0)
table=d.add_table(numrows,numcols)
table.style=style
for r,row in enumerate(list_table):
for c,cell in enumerate(row):
table.row_cells(r)[c].text=cell
d.save('tablestyles.docx')
Затем я открыл документ, выделил разделенную таблицу и в разделе «Формат абзаца» выбрал «Сохранить со следующим», что успешно предотвратило разделение таблицы на странице:
Вот XML-код неповрежденной таблицы:
Вы можете видеть, что выделенная строка показывает свойство абзаца, которое должно удерживать таблицу вместе. Поэтому я написал эту функцию и вставил ее в код над строкой d.save('tablestyles.docx')
:
def no_table_break(document):
tags=document.element.xpath('//w:p')
for tag in tags:
ppr=tag.get_or_add_pPr()
ppr.keepNext_val=True
no_table_break(d)
Когда я проверяю код XML, тег свойства абзаца установлен правильно, и когда я открываю документ Word, флажок «Сохранить со следующей» установлен для всех таблиц, но таблица по-прежнему разделена на страницы. Я пропустил тег XML или что-то, что мешает правильной работе?
w:cantSplit
может определить, разделена ли ячейка по страницам (конечно, с ее строкой). - person scanny   schedule 11.01.2017