从 Python-Docx 中的单元格中删除段落
Removing Paragraph From Cell In Python-Docx
我正在尝试创建一个包含两行 header 的 table,它对所有样式使用简单的模板格式。两行 header 是必需的,因为我在两个主要类别下有相同的 header。似乎在 Word 中处理此问题的唯一方法是将两行 table 嵌套到主文档的 header 行中,从而使文档格式化并在页面之间重复 header内容table。
在 Python-DocX 中,table 单元格始终由一个空段落元素创建。对于我的用例,我需要能够完全删除这个空段落元素,而不是简单地用空字符串清除它。否则我的嵌套 table 上方有换行符,这破坏了我对单个 table.
的错觉
那么问题来了,如何去掉空段落?
如果您知道处理两行 header 实现的更好方法...那也将不胜感激。
虽然 Paragraph.delete()
尚未在 python-docx
中实现,但此处记录了一个解决方法函数:https://github.com/python-openxml/python-docx/issues/33#issuecomment-77661907
请注意,table 单元格必须始终以段落结尾。因此,您需要在 table 之后添加一个空的,否则我相信您在尝试加载文档时会遇到所谓的 "repair-step" 错误。
可能值得一试,没有额外的段落只是为了确认;我希望没有它看起来会更好,但上次我尝试时出现错误。
正如@scanny之前所说,通过p自定义删除函数,可以删除当前图
我只是想做一个补充,以防万一你要删除多段。
def delete_paragraph(paragraph):
p = paragraph._element
p.getparent().remove(p)
paragraph._p = paragraph._element = None
def remove_multiple_para(doc):
i = 0
while i < len(doc.paragraphs):
if 'xxxx' in doc.paragraphs[i].text:
for j in range(i+2, i-2, -1):
# delete the related 4 lines
delete_paragraph(doc.paragraphs[j])
i += 1
doc.save('outputDoc.docx')
doc = docx.Document('./inputDoc.docx')
remove_multiple_para(doc)
我正在尝试创建一个包含两行 header 的 table,它对所有样式使用简单的模板格式。两行 header 是必需的,因为我在两个主要类别下有相同的 header。似乎在 Word 中处理此问题的唯一方法是将两行 table 嵌套到主文档的 header 行中,从而使文档格式化并在页面之间重复 header内容table。
在 Python-DocX 中,table 单元格始终由一个空段落元素创建。对于我的用例,我需要能够完全删除这个空段落元素,而不是简单地用空字符串清除它。否则我的嵌套 table 上方有换行符,这破坏了我对单个 table.
的错觉那么问题来了,如何去掉空段落?
如果您知道处理两行 header 实现的更好方法...那也将不胜感激。
虽然 Paragraph.delete()
尚未在 python-docx
中实现,但此处记录了一个解决方法函数:https://github.com/python-openxml/python-docx/issues/33#issuecomment-77661907
请注意,table 单元格必须始终以段落结尾。因此,您需要在 table 之后添加一个空的,否则我相信您在尝试加载文档时会遇到所谓的 "repair-step" 错误。
可能值得一试,没有额外的段落只是为了确认;我希望没有它看起来会更好,但上次我尝试时出现错误。
正如@scanny之前所说,通过p自定义删除函数,可以删除当前图
我只是想做一个补充,以防万一你要删除多段。
def delete_paragraph(paragraph):
p = paragraph._element
p.getparent().remove(p)
paragraph._p = paragraph._element = None
def remove_multiple_para(doc):
i = 0
while i < len(doc.paragraphs):
if 'xxxx' in doc.paragraphs[i].text:
for j in range(i+2, i-2, -1):
# delete the related 4 lines
delete_paragraph(doc.paragraphs[j])
i += 1
doc.save('outputDoc.docx')
doc = docx.Document('./inputDoc.docx')
remove_multiple_para(doc)