В качестве примера, у меня есть общий скрипт, который выводит стили таблицы по умолчанию с помощью python-docx (этот код работает отлично):Как сохранить таблицы строк в 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 или что-то, что мешает этому работать должным образом?
Я думаю, вам нужно будет более конкретно узнать, что такое «осиротевшая» строка. Следующий шаг будет состоять в том, чтобы увидеть, сможете ли вы выполнить результат после использования приложения Word/UI. Если вы можете сузить его таким образом, вы можете определить элемент XML/атрибут, который имеет значение. 'w: cantSplit' может определить, разделена ли ячейка на разных страницах (с ее строкой, конечно). – scanny
@scanny все, что я имею в виду по оси сирот, это та часть таблицы, которая находится на одной странице, а другая часть таблицы находится на другом. – LMc
Вопрос заключается в том, находится ли разрыв на четной границе строки или сломан внутри строки, как часть строки на одной странице, а остальная часть - в верхней части следующей страницы. Это разные (неправильные) поведения. – scanny