作为一个例子,我有一个通用脚本,使用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')
接下来,我打开文档,突出显示拆分表并在段落格式下选择"Keep with next",这成功阻止了表格在页面中拆分:
这是非破坏表的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标签或者阻止它正常工作的东西吗?