我想使用python-docx
在表格中间插入几行。有什么办法吗?我试过使用similar to inserting pictures approach,但它没有用。
如果没有,我会欣赏任何关于哪个模块更适合此任务的提示。谢谢。
这是我试图模仿插入图片的想法。这是不对的。 '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')
答案 0 :(得分:1)
简短的回答是否定。在API中没有Table.insert_row()
方法。
一种可能的方法是编写一个直接操作底层XML的所谓“变通办法”。您可以从其<w:tbl>
代理对象获取任何给定的XML元素(例如,在这种情况下为<w:tr>
,或者可能是python-docx
)。例如:
tbl = table._tbl
这为您提供了XML层次结构的起点。从那里,您可以从头开始创建新元素,或者通过复制并使用lxml._Element
API调用将其置于XML中的正确位置。
这是一种先进的方法,但可能是最简单的选择。据我所知,没有其他Python包提供更广泛的API。另一种方法是在Windows中使用COM API或VBA中的任何东西,可能是IronPython。这只能在运行Windows操作系统的小规模(桌面,而不是服务器)上运行。
在python-docx workaround function
和python-pptx workaround function
上进行搜索会找到一些示例。
答案 1 :(得分:1)
您可以通过以下方式在最后位置添加一行:
from win32com import client
doc = word.Documents.Open(r'yourFile.docx'))
doc = word.ActiveDocument
table = doc.Tables(1) #number of the tab you want to manipulate
table.Rows.Add()
答案 2 :(得分:0)
尽管根据python-docx文档没有直接可用的api来实现此目的,但是有一个简单的解决方案,无需使用其他任何库(例如lxml),只需使用python-docx提供的基础数据结构即可,是CT_Tbl,CT_Row等。 这些类确实具有诸如addnext,addprevious之类的通用方法,这些方法可以方便地在当前元素之后/之前将元素作为同级添加。 因此,该问题可以通过以下方式解决(在python-docx v0.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')
这应该可以解决问题
答案 3 :(得分:0)
您可以将行插入到表格的末尾,然后将其移动到另一个位置,如下所示:
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)
答案 4 :(得分:0)
addnext()似乎将是更好的选择,并且可以正常工作,唯一的是,我无法设置行的高度,所以请提供一些答案,如果您知道的话!
current_row = table.rows[row_index]
table.rows[row_index].height_rule = WD_ROW_HEIGHT_RULE.AUTO
tbl = table._tbl
border_copied = copy.deepcopy(current_row._tr)
tr = border_copied
current_row._tr.addnext(tr)