使用 win32com 操作 word 中的表格
由于工作需要,最近需要对 word 中的表格进行写入操作,首先考虑的是 python-docx 库。
对于 docx 库,虽然它比较简单、容易上手,但是有两个比较明显的缺点:
-
只能操作 docx 文件,对于 doc 文件,需要转化后再使用。
-
其 paragraphs 与 tables 是两组完全不同的对象,两者无法进行联系,所以单独添加、修改、删除段落或者表格内容,使用该库比较方便,但是一旦需要获取某表格前对该表的描述等信息(提取一堆表总需要知道这个表名字叫啥吧),就相当困难了。
iS-RPA 自带 win32com 库,直接进行调用即可。
目标是将空表格中都用数字 1 填满。
这边直接给出代码:
from win32com.client import Dispatch
word = Dispatch('Word.Application') # 调用word程序
word.Visible = 0
word.DisplayAlerts = 0 # 不在前台显示文档及错误,在实际使用阶段可以全部关闭,提高运行速度
doc = word.Documents.Open(path) # 打开文档
t = doc.Tables # 获取文档中的表格
for i in range(1,3):
for j in range(3):
t[0].Rows[i].Cells[j].Range.Text = '1'
doc.Close() # 关闭文档
word.Quit() # 退出word程序
对于第二张表格这种进行了合并单元格操作的情况,如果还是用 t[1].Rows[i].Cells[j].Range.Text 会报错:pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Word', '无法访问此集合中单独的行,因为表格有纵向合并的 单元格。', 'wdmain11.chm', 25471, -2146822297), None)
因此需要换一种写法:
t(2).Cell(i,j).Range.Text = '1' # 其中t(2)和t[1]效果是一样的
下面是案例文件,大家可以自行测试。
fb63d95db2ed4352a5c1415fb0ca471d_test.docx
👍
强大的 win32com,牛气的光头雷
先收藏着,以防下次用到