python docx 从文档中删除 table

python docx delete table from document

我想根据左上角单元格的内容从文档中删除一些表格。

我试过了:

allTables = document.tables
for activeTable in allTables:
    if activeTable.cell(0,0).paragraphs[0].text == 'some text':
        allTables.remove(activeTable)

我希望删除单元格 (0,0) 中包含 'some text' 的所有表格,但它们仍在文档中。

进程按预期进入带有 "allTables.remove(activeTable)" 的行:indexToDelete = allTables.index(activeTable)在 if 语句中给出了表格,我正在寻找。

留言是"Process finished with exit code 0"

听起来您的测试 if activeTable...text == 'some text' 对任何表格都不成功。在这种情况下,.remove() 调用永远不会执行,但脚本仍然 returns 退出代码 0(成功)。

首先验证您的测试,可能类似于:

for table in document.tables:
    print("'%s'" % table.cell(0, 0).paragraphs[0].text)

并确保段落文本符合您的想法。这应该打印出如下内容:

'some text but also some other text'
...

确定后,您可能想要测试整个字符串以外的其他内容,也许使用 .startswith():

text = table.cell(0, 0).paragraphs[0].text
if text.startswith('some text'):
    print('found one')

一旦你完成了这项工作,你就可以继续下一个问题了。

解决方法是:

allTables = document.tables

for activeTable in allTables:
    if activeTable.cell(0,0).paragraphs[0].text == 'some text':
        activeTable._element.getparent().remove(activeTable._element)

感谢 scanny。

你可以使用这个功能

from docx import Document

document = Document('YOUR_DOCX')

def Delete_table(table):
        document.tables[table]._element.getparent().remove(document.tables[table]._element)

Delete_table(0)

document.save('OUT.docx')