3

我正在尝试创建一个带有两行标题的表格,该表格对所有样式都使用简单的模板格式。需要两行标题,因为我在两个主要类别下有相同的标题。看来,在 Word 中处理此问题的唯一方法是,将一个两行表嵌套到主内容表的标题行中,以便文档格式化和跨页重复标题。

在 Python-DocX 中,表格单元格始终使用单个空段落元素创建。对于我的用例,我需要能够完全删除这个空段落元素,而不是简单地用空字符串清除它。否则我的嵌套表格上方有换行符,这破坏了我对单个表格的错觉。

所以问题是如何删除空段落?

如果您知道处理两行标题实现的更好方法……那也将不胜感激。

4

2 回答 2

9

虽然Paragraph.delete()尚未在 中实现python-docx,但此处记录了一个解决方法功能:https ://github.com/python-openxml/python-docx/issues/33#issuecomment-77661907

请注意,表格单元格必须始终以段落结尾。因此,您需要在表格后添加一个空表格,否则我相信您在尝试加载文档时会遇到所谓的“修复步骤”错误。

如果没有额外的段落只是为了确认,可能值得一试;我希望没有它它看起来会更好,但上次我尝试我得到了错误。

于 2015-03-26T19:21:59.503 回答
0

正如@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)
于 2021-09-09T18:03:01.180 回答