Blog:zhihu.com/people/yunlongyun
本文主要讲解python中操作word的思路。
一、Hello,world!
使用win32com需要安装pypiwin32
pip install pypiwin32
推荐使用python的IDLE,交互方便
1、如何新建文档
from win32com.client import Dispatch
app = Dispatch('Word.Application')
# 新建word文档
doc = app.Documents.Add()
按F5运行,发现什么效果都没有, 这是因为Word被隐藏了。
2、如何显示Word
app.Visible = 1
运行后,熟悉的Word界面出现。现在来输入文字。
3、如何输入
我们在Word中输入文字时,一般会先使用鼠标点击需要输入文字的位置,这个过程是获得了光标焦点。
当我们需要替换某些文字时,首先会选中某些文字,然后再输入、被选择的文字呈现出灰色的背景,表示被选中了。
光标焦点和选择范围在Word中,都是Selection。什么都没选择的光标焦点,和选择了整片文章的选择范围,代表了Selection的最小和最大范围。
这也是为什么整个Word中只能有一个Selection的原因。因为光标或者选择范围就只能有一个。
# 运行下句代码后,s获得新建文档的光标焦点,也就是图中的回车符前
s = app.Selection
# 用“Hello, World!“替换s代表的范围的文本
s.Text = 'Hello, world!'
此时,s的范围为’Hello, world!’这句话的选择区域。
能如此方便的调用Word,得益于其底层的COM(组件对象模型)可以被任意语言调用。
Selection是Word对象模型中的类,此处的s是它的对象(实例)。
4、如何查看选择区域是什么
s.Text可以查看或者设置s选择区域的文本。Word对象模型中很多对象都有默认属性,Text就是Selection的默认属性,类似python的__str__方法。运行s()调用s的默认属性,此处等于于运行了s.Text。
s()
控制台显示,s的范围为’Hello, world!’这句话的选择区域。
二、对Word对象模型的简单理解
Word中最重要的类(对象)有以下几个。
1、Application对象:Word应用。Application包含了菜单栏、工具栏、命令以及所有文档等。
# 如何获得
app = win32com.client.Dispatch('Word.Application')
2、Document对象:文档。可以有多个Document,就像Word可以打开多个文档。
使用下列代码新建文档或者打开文档
# 如何获得
# 新建文档
doc = app.Documents.Add()
# 打开已有文档
doc = app.Documents.Open('你的Word文件路径')
3、Selection对象:选区:代表当前窗口的选区。它可以是文档中的选择(高亮)区域,也可以是插入点(如果没有什么被选中)。同一时间只能激活一个Selection。
s = app.Selection
在Word中word宏是什么,按下Alt+F11打开宏编辑器
然后按下F2打开对象浏览器
输入selection并回车,发现成员一列中完全匹配Selection的只有4个类,这表示只有这些类的Selection属性可以返回Selection对象(如图)。
Application我们前面介绍过word宏是什么,其它的类可以用同样的方法查询如何获得。
# 替换当前选择
s.Text = 'Hello, world!'
# 输入
s.TypeText('Hello, world!')
# 把当前选择复制到剪贴板
s.Copy()
# 粘贴剪贴板中的内容
s.Paste()
Text和TypeText的不同在于完成后的选区:
Text:输入的文本(前例中选区为’Hello, world!’);
TypeText:文本后的插入点(前例中选区为!后的插入点)。
# 使用Start,End指定字符范围
s.Start = 0
s.End = n
# s从第0个字符(第1个字符前的插入点)到第n个字符。
# 汉字是每字为1字符
# 相当于按下Delete键
s.Delete()
# 相当于按下Ctrl+A
s.WholeStory()
# 向左移动
s.MoveLeft()
# 向右移动2个字符,第1个参数是移动单位WdUnits,见下图
s.MoveRight(1, 2)
所有能获得Selection的类
4、Range对象:连续区域。Range表示一个连续区域。Range由Start和End位置定义,用来区分文档的不同部分。Range是独立于Selection的。不管Selection是否改变,都可以定义和操作Range。文档中可以定义多个Range。这个连续区域同样可以小到一个插入点,大到整个文档。Selection有Range属性,而Range没有Selection属性。
当使用Range(Start, End)方法来指定文档的特定范围时。文档的第一个字符位置为0,最后一个字符的位置和文档的字符总数相等。不提供参数时代表选择所有范围。
r = doc.Range()
# 或
r = s.Range()
Word中有很多对象的Range属性都能返回Range对象,请在Word-宏编辑器-对象浏览器中自己查询。
因为本文仅使用Selection就可以达到效果,Range的很多属性和方法和Selection是类似的。
5、Font对象:字体。包含对象的字体属性(字体名称、字号、颜色等)。
font = s.Font
# 或
font = r.Font
同样,其余获得方法可在Word-宏编辑器-对象浏览器中查询。
# 字体设置为仿宋,电脑上必须安装有该字体
font.Name = '仿宋'
# 字号设置为三号
font.Size = 16
ParagraphFormat对象:段落格式。用来设置段落格式,包括对齐、缩进、行距、边框底纹等。
pf = s.ParagraphFormat
# 或
pf = r.ParagraphFormat
同样,其余获得方法可在Word-宏编辑器-对象浏览器中查询。
# 左、中、右 对齐分别为0, 1, 2,其他对齐方式见.NET 文档中的ParagraphFormat
pf.Alignment = 0
# 单倍、1.5倍、双倍行距分别为0, 1, 2,其他见ParagraphFormat文档
pf.LineSpacingRule = 0
# 指定段落的左缩进值为21磅。
pf.LeftIndent = 21
7、PageSetup对象:页面设置。代表所有的页面设置属性,包括左边距,底边距,纸张大小等等。
ps = doc.PageSetup
# 或
ps = s.PageSetup
# 或
ps = r.PageSetup
同样,其余获得方法可在Word-宏编辑器-对象浏览器中查询。
# 上边距79磅
ps.TopMargin = 79
# 页面大小,A3、A4分别为6,7
ps.PageSize = 7
8、Styles对象:样式集。Styles包含指定文档中内置和用户定义的所有样式,它返回一个样式集。其中的每个样式的属性包括字体、 字形、 段落间距等。如常见的正文、页眉、标题1样式。
# 只能通过文档获得
styles = doc.Styles
# 返回正文样式
normal = styles(-1)
# 修改正文样式的字体字号
normal.Font.Name = '仿宋'
normal.Font.Size = 16
Styles的返回参数,标题1、标题2、标题3分别为-2、-3、-4,页眉为-32,标题为-63,其他见Styles文档
三、解决问题思路
因为有很多功能,在文档中难以直接找到,需要使用如下方法。
1、把想实现的功能,使用word的录制宏,在宏编辑器里查看VBA代码,从而了解大概使用什么方法。
———END———
限 时 特 惠:本站每日持续更新海量各大内部创业教程,一年会员只需128元,全站资源免费下载点击查看详情
站 长 微 信:jiumai99