在 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 中,如何删除表格行?的主要内容,如果未能解决你的问题,请参考以下文章

Python-docx,如何在表格中设置单元格宽度?

如何设置表格中的行高以在 python-docx 中修复?

python-docx设置docx文档表格样式

利用Python-docx 读写 Word 文档中的正文表格段落字体等

如何用js删除表格一行或者多行

如何用微信小程序制作execl表格 能添加删除任意行数据