Python语言可通过Win32com组件对Microsoft Office文件进行存取,而且Python已内置了Win32com组件,不需要另外安装。
要用Win32com组件操作Microsoft Office文件,计算机必须已确保安装了Microsoft Office软件。
Win32com组件不需要安装,直接导入就可使用,下面我们先导入Win32com组件的client模块:
from win32com import client
要处理Word文件,需先创建Word应用程序变量。语法为:
应用变量 = client.gencache.EnsureDispatch('Word.Application')
例如,建立一个名为word的Word应用程序变量:
word = client.gencache.EnsureDispatch('Word.Application')
Word应用程序变量的Visible、DisplayAlerts属性及Documents方法:
用Win32com组件新建文件是通过Documents的Add()方法来实现,语法为:
文件变量 = 应用变量.Documents.Add()
例如,新建一个文件,并保存至变量doc:
doc = word.Documents.Add()
文件内容的位置可通过文件变量的Range()方法来设置,语法为:
范围变量 = 文件变量.Range(起始位置, 结束位置)
起始位置及结束位置为整数,表示字符的起始及结束位置。例如,把文件前10个字符保存至range1变量:
range1 = doc.Range(0, 9)
向Word文件中插入文本可通过两种方法来实现。一种方法是通过InsertAfter()方法,此方法把文字插入到范围变量结束位置之后,执行插入操作以后,位置变量的结束值会变为所插入的内容后的位置值,语法为:
范围变量.InsertAfter(文字)
另一种方法是通过InsetBefore()方法,此方法是将文字插入到范围变量起始位置的前面,语法为:
范围变量.InsertBefore(文字)
使用InsertBefore()方法插入文本后不会改变范围变量的起位置起始值,再次使用InsertBefore方法时,还是会把文字插入到变量最初起始位置值之前。
本案例的Word文件位于media文件夹中(media文件夹与.py文件位于同一目录中)。由于Win32com组件存取文件时不能使用相对路径,所以必须先取得Python程序文件所在路径(即media文件夹的路径),语法为:
import os
路径变量 = os.path.dirname(__file__)
保存Word文件的语法为:
文件变量.SaveAd(路径变量)
例如,把文件保存在media文件夹中,文件名为test1.docx:
cpath = os.path.dirname(__file__)
doc.SaveAs(cpath + "\\media\\test1.docx")
处理完Word文件,通常会在程序最后关闭Word文件及应用,以免占用系统资源,语法为:
文件变量.Close()
应用变量.Quit()
用Win32com组件新建Word文件,插入内容后存盘。
import os
from win32com import client
word = client.gencache.EnsureDispatch('Word.Application')
word.Visible = 1
word.DisplayAlerts = 0
doc = word.Documents.Add()
range1 = doc.Range(0, 0) # 设置范围变量的起止位置
range1.InsertAfter("这是测试第一行\n这是测试第二行\n")
range1.InsertAfter("这是测试第三行\n这是测试第四行\n")
range1.InsertBefore("第一次插入到文件最前方\n")
range1.InsertBefore("再次插入到文件最前方\n")
cpath = os.path.dirname(__file__)
doc.SaveAs(cpath + "\\media\\test1.docx")
# doc.Close()
# doc.Quit()
Win32com组件是通过Documents的Open()方法来实现打开文件的,语法为:
文件变量 = 应用变量.Documents.Open(文件路径)
例如,打开刚才保存的test1.docx文件,文件变量名为doc:
doc = word.Documents.Open(cpath + "\\media\\test1.docx")
获取文件内容的方法有两种,第一种较为简单,用文件变量的Content属性即可获取全部内容,语法为:
文件变量.Content
例如,通过下面代码可在命令窗口中显示doc文件变量的内容:
print(doc.Content)
第二种获取文件内容的方法是先取得所有段落,在通过循环来显示段落内容。取得所有段落的语法为:
段落集合变量 = 文件变量.Paragraphs
例如,取得所有段落内容并保存在paragraphs集合变量中:
paragraphs = doc.Paragraphs
通过循环显示段落内容的代码为:
for p in paragraphs:
text = p.Range.Text.strip()
print(text)
其中,"p.Range.Text"代码用于实现段落内容的读取,其后的strip()方法用于实现换行符的删除,执行结果与第一种方法相同。