首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以用python在特定位置插入行吗?

可以用python在特定位置插入行吗?
EN

Stack Overflow用户
提问于 2017-09-14 09:32:20
回答 6查看 8.4K关注 0票数 10

我想使用python-docx在表的中间插入几行。有什么办法吗?我试过使用类似于插入图片的方法,但它没有工作。

如果不是的话,我很想知道哪个模块更适合这个任务。谢谢。

这是我试图模仿插入图片的想法。这是错误的。“‘Run”对象没有属性'add_row’。

代码语言:javascript
复制
from docx import Document
doc = Document('your docx file')
tables = doc.tables
p = tables[1].rows[4].cells[0].add_paragraph()
r = p.add_run()
r.add_row()
doc.save('test.docx')
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-09-14 20:08:33

简短的回答是否定的。API中没有Table.insert_row()方法。

一种可能的方法是编写一个所谓的“变通函数”,直接操作底层XML。您可以从它的<w:tbl>代理对象获得任何给定的XML元素(例如,本例中的<w:tr>,或者可能是<w:tr>)。例如:

代码语言:javascript
复制
tbl = table._tbl

这为您在XML层次结构中提供了一个起点。在那里,您可以从头开始创建一个新元素,或者通过复制和使用XML调用将其放置在lxml._Element中的正确位置。

这是一种有点高级的方法,但可能是最简单的选择。据我所知,没有其他Python包提供更广泛的API。另一种方法是在Windows中使用COM API或任何来自VBA (可能是IronPython )的内容。这只能在运行Windows OS的小规模(桌面,而不是服务器)上工作。

通过搜索python-docx workaround functionpython-pptx workaround function可以找到一些例子。

票数 5
EN

Stack Overflow用户

发布于 2019-11-15 12:09:34

可以将行插入到表的末尾,然后将其移到另一个位置,如下所示:

代码语言:javascript
复制
from docx import Document
doc = Document('your docx file')
t = doc.tables[0]
row0 = t.rows[0] # for example
row1 = t.rows[-1]
row0._tr.addnext(row1._tr)
票数 3
EN

Stack Overflow用户

发布于 2019-09-11 06:01:43

虽然根据python文档,没有一个直接可用的api来实现这一点,但是有一个简单的解决方案,不需要使用任何其他lib,比如lxml,只需使用python提供的底层数据结构,即CT_Tbl、CT_Row等。这些类确实有一些常见的方法,比如addnext、add前文,它们可以方便地在当前元素之后/之前添加元素。因此,这个问题可以解决如下(在python-docxv0.8.10上进行测试)

代码语言:javascript
复制
    from docx import Document
    doc = Document('your docx file')
    tables = doc.tables
    row = tables[1].rows[4]
    tr = row._tr # this is a CT_Row element
    for new_tr in build_rows(): # build_rows should return list/iterator of CT_Row instance
        tr.addnext(new_tr)
    doc.save('test.docx')

这应该能解决这个问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46215464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档