我想根据左上小区的内容从文档中删除一些表。
我尝试了:
allTables = document.tables
for activeTable in allTables:
if activeTable.cell(0,0).paragraphs[0].text == 'some text':
allTables.remove(activeTable)
我希望删除所有包含单元格(0,0)中包含"一些文本"的表,但它们仍在文档中。
该过程以" alltables.remove(activetable)"为预期进入该行:if语句中的indexToDelete = allTables.index(activeTable)
给出了表格,我正在寻找。
该消息是"完成出口代码0的过程"
解决方案是:
allTables = document.tables
for activeTable in allTables:
if activeTable.cell(0,0).paragraphs[0].text == 'some text':
activeTable._element.getparent().remove(activeTable._element)
感谢Scanny。
听起来您的测试if activeTable...text == 'some text'
在任何表中都没有成功。在这种情况下,.remove()
调用从未执行,但脚本仍然返回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')
一旦有工作,您就可以继续解决下一个问题。
您可以使用此功能
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')