在 python-docx 中,如何删除表格行?
Posted
技术标签:
【中文标题】在 python-docx 中,如何删除表格行?【英文标题】:In python-docx how do I delete a table row? 【发布时间】:2019-04-06 03:06:18 【问题描述】:我不知道如何在 python-docx 中删除表格行。具体来说,我的表格带有一个标题行和一个具有存储在第一个单元格文本中的特殊标记的行。我使用令牌搜索表格,然后填写表格的一堆行。但是如何在添加新行之前删除具有令牌的第 1 行? 我试过了
table.rows[1].Delete()
和
table.rows = table.rows[0:1]
第一个因无法识别的函数而失败(文档在 Microsoft API 中引用了此函数,但我不知道这意味着什么)。 如文档所述,第二个失败是因为 table.rows 是只读的。
那我该怎么做呢?
【问题讨论】:
【参考方案1】:这个功能不是内置的,这让我很震惊。在我搜索论坛时,我发现在过去五年中很多人都在问这个问题。但是,存在一种解决方法,这里是:
def remove_row(table, row):
tbl = table._tbl
tr = row._tr
tbl.remove(tr)
row = table.rows[n]
remove_row(table, row)
【讨论】:
【参考方案2】:不幸的是,All the Rage 的答案对我不起作用。但是,我能够按如下方式删除行和列:
from docx import Document
w=Document("path")
table_1=w.tables[0]
# delete row
print(len(table_1.rows))
row2=table_1.rows[1]
row2._element.getparent().remove(row2._element)
print(len(table_1.rows))
# delete column
col=table_1.table.columns[1]
for cell in col.cells:
cell._element.getparent().remove(cell._element)
【讨论】:
【参考方案3】:你可以使用这个功能:
from docx import Document
document = Document('YOUR_DOCX')
def Delete_row_in_table(table, row):
document.tables[table]._tbl.remove(document.tables[table].rows[row]._tr)
Delete_row_in_table(0, 0)
document.save('OUT.docx')
【讨论】:
【参考方案4】:我制作了这个视频来展示如何轻松做到这一点,因为它让我很困惑。 https://www.youtube.com/watch?v=qA5QRXwAt2I
Table = document.tables[0]
RowA=Table.rows[0]
table_element = Table._tbl
table_element.remove(RowA._tr)
上面的代码从第一个表中删除了第一行。 您必须更改 xml 元素,没有办法通过 docx 的 API 来完成。
【讨论】:
以上是关于在 python-docx 中,如何删除表格行?的主要内容,如果未能解决你的问题,请参考以下文章