docx中,实现删除段落功能?(已解决)

docx模块文档中的clear()只是清空本段落内容,没有删除段落。
docx中,实现删除段落功能?

from copy import deepcopy
from docx import Document

filename = r'C:\Users\Administrator\Desktop\python测试\编码区\表3.docx'
filename_模板 = r'C:\Users\Administrator\Desktop\python测试\编码区\准备模板\报告表模板.docx'

document = Document(filename)
document_模板 = Document(filename_模板)
table_模板建筑物总汇 = document_模板.tables[0]
new_table1 = deepcopy(table_模板建筑物总汇)

for a in document.paragraphs:
    print(a.text)
print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")

for j in range(len(document.paragraphs)):
    if "jz1" in document.paragraphs[j].text:
        paragraph = document.paragraphs[j]
        new_paragraph = paragraph.insert_paragraph_before(text="建筑物1", style='Heading 3')#本段落前插入新段落
        new_paragraph._p.addnext(new_table1._element)#在新的段落下插入复制的表格
        document.paragraphs[j+1].clear()#重新计段落,删掉标识所在段落,保持总段落数不变
        print(j,"段找到")

document.save(r'C:\Users\Administrator\Desktop\python测试\编码区\text.docx')

现在遍历所有段落,找到标识文本“jz1”,返回标识文本所在段落,并在这个段落前添加新段落,然后插入复制的表格。再将返回的标识符所在段落删除。(等效用新的段落含表格,替换掉标识符所在的段落)

docx中,实现删除段落功能?
这段有问题,删除不了段落,只是清空。

找了下资料
用这段能实现,不知还有别的方法嘛

p = document.paragraphs[j+1]._element
p.getparent().remove(p)
Jason990420
最佳答案

使用以下代码,您应该能够在简单的情况下执行此操作:(未测试内容)

def delete_paragraph(paragraph):
    p = paragraph._element
    p.getparent().remove(p)
    p._p = p._element = None

随后对“已删除”段落对象的任何访问都会引发AttributeError,因此您应注意不要使引用保持混乱,包括作为Document.paragraphs存储值的成员。之所以不在库中,是因为一般情况比较棘手,特别是需要检测和处理段落中可能存在的各种链接项。 图片,超链接或图表等内容。但是,如果您确定这些都不存在,那么这几行就可以完成工作。

3年前 评论
讨论数量: 1
Jason990420

使用以下代码,您应该能够在简单的情况下执行此操作:(未测试内容)

def delete_paragraph(paragraph):
    p = paragraph._element
    p.getparent().remove(p)
    p._p = p._element = None

随后对“已删除”段落对象的任何访问都会引发AttributeError,因此您应注意不要使引用保持混乱,包括作为Document.paragraphs存储值的成员。之所以不在库中,是因为一般情况比较棘手,特别是需要检测和处理段落中可能存在的各种链接项。 图片,超链接或图表等内容。但是,如果您确定这些都不存在,那么这几行就可以完成工作。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!