好好学习,天天向上

用python操纵Microsoft Office之Word

前面说了怎么操作EXCEL,现在讲讲如何操作WORD。

当我还是个小菜鸟的时候,曾经每半个月就要将一份病毒扫描报告的内容复制粘贴到几十份文档中。个中心酸,无法言表。而网上关于使用pywin32这个模块操作WORD文档的信息都很初步。因此,虽然win32com很好用,但是还是无法用它来达成解放劳动力的目的。

在一番摸索下,终于明白了如何参考MSDN上Office相关的接口文档来使用win32com操作WORD文档。下面,就来讲讲如何结合MSDN的接口文档(Microsoft.Office.Interop.Word)使用win32com操作WORD文档吧

Word基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 导入模块
import win32com
from win32com.client import *
# 新建一个基于COM对象的应用
docApp = win32com.client.Dispatch("Word.Application")
# 设置应用可见
docApp.Visible = True
# 新增一个文档
doc = docApp.Documents.Add()
# 保存并关闭文档
doc.SaveAs("E:\\text.doc")
doc.Close()
# 打开已有的应用
doc = docApp.Documents.Open("E:\\text.doc")
# 不保存,直接退出
doc.Close(SaveChanges=0)
# 关闭应用
docApp.Quit()

参考: * 应用:Application * 是否可见:Visible * 文档:Documents

Selection/Table

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# selection表示文档中的一个选中区域,或者光标所指的地方
sel = docApp.Selection
# 在selection后插入
sel.Range.InsertAfter("hello, ele")
# 向下移动,MoveDown(Unit, Count, Extend)
sel.MoveDown(5,12)
# 表格操作
# 文档中表格个数
tblcnt = doc.Tables.Count
# 表格的Index也是从0开始的
doc.Tables[0].Rows[0].Cells[0].Range.Text = "hello, ele"
# 复制粘贴
# 拷贝第2个表格到剪切板上
doc.Tables[1].Range.Copy()
# 粘贴到sel所在位置上
sel.Range.Paste()

参考: * Selection * Range * Tables

其他

1
2
3
4
5
6
7
8
9
10
11
12
13
# 选中一大块区域
range = doc.Range(doc.Tables[0].Range.Start, doc.Tables[2].Range.End)
# 移动到某一个heading下
from win32com.client import constants
# GoTo(What:WdGoToItem, Which:WdGoToDirection, Count, Name)
# 往下移动到第十个heading
doc.ActiveWindow.Selection.GoTo(constants.wdGoToHeading, constants.wdGoToNext, 10)
# 往下移动一个heading
sel = doc.ActiveWindow.Selection.GoToNext(constants.wdGoToHeading)
# 第一个段落的文字
sel.Paragraphs[0].Range.Text
# 刷新目录
doc.TablesOfContents[0].Update()

参考: * ActiveWindow * constants: WdGoToItem * constants: WdGoToDirection

珍爱生命,我用python。 学会了如何自动化操作word,大批量文档修改也不是一件令人烦心的事情了,O(∩_∩)O~

请言小午吃个甜筒~~