我想使用python-docx在表的中间插入几行。有什么办法吗?我试过使用类似于插入图片的方法,但它没有工作。
如果不是的话,我很想知道哪个模块更适合这个任务。谢谢。
这是我试图模仿插入图片的想法。这是错误的。“‘Run”对象没有属性'add_row’。
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')发布于 2017-09-14 20:08:33
简短的回答是否定的。API中没有Table.insert_row()方法。
一种可能的方法是编写一个所谓的“变通函数”,直接操作底层XML。您可以从它的<w:tbl>代理对象获得任何给定的XML元素(例如,本例中的<w:tr>,或者可能是<w:tr>)。例如:
tbl = table._tbl这为您在XML层次结构中提供了一个起点。在那里,您可以从头开始创建一个新元素,或者通过复制和使用XML调用将其放置在lxml._Element中的正确位置。
这是一种有点高级的方法,但可能是最简单的选择。据我所知,没有其他Python包提供更广泛的API。另一种方法是在Windows中使用COM API或任何来自VBA (可能是IronPython )的内容。这只能在运行Windows OS的小规模(桌面,而不是服务器)上工作。
通过搜索python-docx workaround function和python-pptx workaround function可以找到一些例子。
发布于 2019-11-15 12:09:34
可以将行插入到表的末尾,然后将其移到另一个位置,如下所示:
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)发布于 2019-09-11 06:01:43
虽然根据python文档,没有一个直接可用的api来实现这一点,但是有一个简单的解决方案,不需要使用任何其他lib,比如lxml,只需使用python提供的底层数据结构,即CT_Tbl、CT_Row等。这些类确实有一些常见的方法,比如addnext、add前文,它们可以方便地在当前元素之后/之前添加元素。因此,这个问题可以解决如下(在python-docxv0.8.10上进行测试)
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')这应该能解决这个问题
https://stackoverflow.com/questions/46215464
复制相似问题