从 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)