第 8 课 · 第五部分 Word 自动化

Word 自动化:批量生成文书

Excel 管数据,Word 管文档。真实工作里最经典的场景是"一张模板 × 一千条数据"。

学习目标

预计用时:读课 35 分钟 + 上机 40 分钟 |  前置知识:第 6 课(变量、字典、循环)、第 7 课(Excel 四步与二维数组) |  本课性质:软件自动化操作课,概念不多但要动手练手感,认证会考"焦点""读取限制""标记法"

知识地图

第 7 课我们用 Excel 处理"数据",本课用 Word 处理"文档"。两课是同一套骨架换了一类软件——学会一个,另一个几乎能自己推出来。第 9 课的邮件自动化会继续复用"读数据 → 填内容 → 发出去"这条主线。

本课在哪儿
第五部分 · 办公自动化。承接第 7 课 Excel,是"软件自动化"的第二个实例。
重点
Word 四步命令;文档对象;焦点概念;官方推荐的"标记填充法"。
难点
理解"为什么不能靠行号定位"——Word 里有大量看不见的格式标记,会让行号/字数算不准。
学完的标志
给你一份带 $姓名$ 标记的模板和一张 Excel 数据表,你能写出循环批量生成文档的流程。

一、Word 也走同样四步

回忆第 7 课:操作 Excel 是"打开工作簿 → 读/写单元格 → 保存 → 关闭"。操作 Word 结构完全一致, 只是把"工作簿对象"换成文档对象,把"单元格"换成"焦点": [1]

步骤命令关键属性
打开打开文档文件路径、访问时密码、编辑时密码、是否可见、输出到(文档对象)
整篇读读取文档文档对象、输出到
整篇写重写文档用新内容覆盖整篇
保存保存文档 / 文档另存为另存为可换路径和文件名
关闭关闭文档文档对象

还有 获取文档路径 等辅助命令。文件支持 .doc / .docx。

1.1 四步连起来是什么样

把上面的表按时间顺序走一遍,就是机器人操作一份 Word 的完整生命周期:

  1. 打开(拿到"遥控器"):打开文档 会返回一个文档对象,必须把它"输出到"某个变量,比如 objDoc。之后所有命令都靠这个变量找到"要操作哪一份文档"。
    预期结果:若"是否可见"填 True,屏幕上会弹出 Word 窗口;填 False 则在后台悄悄打开。
  2. 读或写(做事):读整篇用 读取文档;整体覆盖用 重写文档;局部插入/替换则要先定位焦点,再用 写入文字 等命令。
  3. 保存(落盘):想覆盖原文件用 保存文档;想留一份新文件用 文档另存为(可改路径和文件名)。不保存就关闭,改动会丢。
  4. 关闭(放开遥控器):关闭文档。循环批量生成时,每轮结束都要关掉,否则 Word 里会开着一堆文档,越跑越慢甚至报错。

为什么每步都要"输出到"变量?机器人不像人那样"看着屏幕知道现在开的是哪个文件"。它只知道你给它的那个变量。所以"输出到"就是把"这份文档的身份证"存起来——没有它,后面的命令找不到操作对象,就像拿着遥控器却不知道对应哪台电视。

1.2 文档对象:Word 版的"工作簿对象"

文档对象是 APA Creator 对"一份已打开的 Word 文档"的指代。类比第 7 课:Excel 里叫工作簿对象,Word 里叫文档对象,作用一模一样——让命令知道该操作哪一份文件。 你可以在一个流程里同时打开好几份文档,每份存进不同变量,互不干扰。

限制要知道(高频考点):读取文档 会把全文文字读出来,但暂不支持读取文字格式、表格状态和图片。[1]

易错点:不要以为 读取文档 会把"标题是红色、正文有表格、插了一张图"这些信息也读回来。它读回来的只是一串纯文字。如果你的需求是"检查表格里的数字",那要换思路(例如改用 Excel 处理,或先在 Word 里把表格转成文本)。

二、焦点:Word 里"你正指着哪儿"

Excel 定位靠"单元格",一格一格很明确;Word 没有格子,靠焦点——当前选中的区域(高亮)或光标位置。 Word 的编辑操作大多针对焦点进行:想改一段字,得先选中它;想插入内容,得先把光标移过去。[1] 换句话说,焦点就是机器人的"笔尖",笔尖落在哪,写的东西就落在哪。

命令作用注意
设置光标位置按"移动次数 + 移动方式(字符/行/段落)"移光标移动次数不能为负,只能向右/下移
选择行选中从"起始行"到"结束行"行号按文档计算
查找文本后设置光标位置找到指定文字,把焦点放到那里相对位置可选"选中文本"

2.1 三个焦点命令各自怎么用

  1. 设置光标位置:适合"从当前位置往前挪几格"。在属性区选移动方式(字符 / 行 / 段落)+ 填移动次数。
    易错:移动次数只能是非负数;想"往回退"是做不到的,只能重新定位。
  2. 选择行:填起始行和结束行,把这一整段选中。
    易错:行号是机器人按它对文档的理解数出来的,不一定是你在屏幕上数的那一行(见 2.2)。
  3. 查找文本后设置光标位置:填要查找的文本,把相对位置设为"选中文本",焦点就落在这段文字上并高亮。
    用途:这是标记填充法的核心一步,最稳。

2.2 为什么不靠"第几行第几个字"

你可能会想:文档结构固定,那我直接算"第 3 行第 10 个字"不就行了?问题在于——Word 文档里藏着大量 看不见的格式标记(段落标记、换行、制表位等)。你屏幕上看是"一行",机器人内部可能数出好几种字符; 今天多一个空格、明天改一次字体,行号就偏了。焦点一旦偏掉,后面写的内容就会插错地方,而且很难排查。

官方提醒:单靠"设置光标位置/选择行"实际效果不好——Word 里有大量看不见的格式标记,会让"字符数/行数"算不准,导致焦点偏掉。[1]

易错点(焦点偏移):流程"时好时坏"、内容偶尔插错位置,九成是焦点没对上。排查顺序:先确认定位用的是标记法而不是行号;再打印出文档内容,确认标记文字和查找文字一字不差(大小写、全半角、空格都要一样)。

三、官方推荐的精准填充法:用标记

这是本节最值钱的技巧,直接对应"批量生成文书":

模板里写标记 $Name$ → 查找文本后设置光标位置(选中标记) → 写入文字(替换成真实内容)

在模板里需要填的地方预先写上 $Name$、$Date$ 这类标记,机器人按标记去找、选中、替换。因为不依赖"第几行第几个字",就不会被隐藏格式干扰。[1]

为什么用标记,而不是靠行号?标记是"路标",行号是"距离"。距离会因为你换了字体、多敲了空格、系统不同而变;路标不会——不管文档怎么排版,$姓名$ 这串文字总在它该在的地方。用标记定位,等于把"脆弱的位置计算"换成"稳定的文字匹配"。这也是为什么官方把它列为推荐做法:它对排版变化免疫。

3.1 标记填充法的标准步骤

  1. 做模板:在 Word 里写好固定文案,把需要变的地方挖成坑,例如"尊敬的 $姓名$,您本月绩效为 $分数$。"。
  2. 打开:打开文档,路径指向模板,是否可见可先设 True 方便观察。
  3. 定位:查找文本后设置光标位置,查找文本填 $姓名$,相对位置选"选中文本"。
  4. 替换:写入文字,内容填真实值(如"张三")。因为是"选中文本"状态,新文字会替换掉标记。
  5. 重复:对 $分数$ 再做一次 3、4 步。
  6. 另存并关闭:文档另存为 到目标路径,再 关闭文档。打开生成的文件核对。

易错点(标记不一致):模板里写的是 $姓名$,命令里却写成 $名字$、少了后一个 $、或用了中文全角括号——查找失败,后面的"写入文字"就会写到错误的焦点上。建议全程复制粘贴标记,别手打。

小技巧:标记成对出现(前后都有 $)更容易一眼看出边界,也降低"部分匹配"的概率。模板定稿后,先手动在 Word 里搜一次每个标记,确认都能搜到,再交给机器人。

四、把 Excel 和 Word 串起来

真实场景往往是:数据在 Excel,模板在 Word,逐行生成一批文档。

机器人骨架(思路,不是可直接粘的代码)
打开Excel → 读取区域,得到二维数组 rows
For Each 一行 In rows
    打开文档(模板.docx)
    查找文本后设置光标位置("$姓名$", 选中文本)
    写入文字(一行[0])
    查找文本后设置光标位置("$部门$", 选中文本)
    写入文字(一行[1])
    文档另存为(输出目录 & 一行[0] & ".docx")
    关闭文档
Next
关闭Excel工作簿

循环体里每次打开的都是同一份模板,但每次另存成不同文件名——就得到了一叠文档。

Excel 数据加 Word 模板批量生成文档:逐行读取、替换标记、另存为新文件、关闭文档 Excel 出数据,Word 出文档:一行生成一份 模板只做一次;循环里每次打开同一份模板,另存成不同文件名。 Excel:数据(二维数组) 姓名 部门 张三 财务 李四 销售 王五 行政 逐行 Word:模板 $姓名$ $部门$ 文档对象:objDoc 另存 输出:每行一份 W 张三.docx W 李四.docx W 王五.docx 单轮动作:打开模板 → 查找标记 → 写入文字 → 另存为新文件 → 关闭文档 模板本身只做一次;每轮结束都要关闭文档,循环外再关闭 Excel 工作簿。
图 12 · Excel 提供一行行数据,Word 模板提供版式;循环里只换数据、另存文件名,模板本身不覆盖。

串起来的关键:Excel 负责"第几行是谁、值是多少"(第 7 课的二维数组),Word 负责"把值填进文档",For Each 负责"一条数据做一轮"。三者各司其职,模板本身只做一次。

易错点(两份文件都要收尾):批量生成时最容易漏的是收尾——循环里每轮要关闭文档,循环外要关闭 Excel 工作簿。否则进程会越堆越多。另外,另存的文件名来自数据列,若数据里有 \ / : * ? " < > | 这类非法字符,保存会失败,记得先清洗。

命令属性细节见 参考页:Word 命令速查。

本课小结

必记要点

文档对象 已打开文档的变量指代 焦点 当前选中区或光标位置 打开文档 四步的第一步 读取文档 只读文字,不含格式/表格/图片 文档另存为 换路径或换文件名保存 标记填充法 用 $Name$ 定位再替换 隐藏格式标记 让行号算不准的元凶

自测

不看上面,凭记忆作答。答错不要紧,解析会告诉你为什么。

上机实践(回到 Windows)

准备:在 res 目录建一个 模板.docx,正文写上"尊敬的 $姓名$,您本月绩效为 $分数$。"(注意 $ 要用英文半角,前后成对)。

任务 A(能读):用 打开文档 打开模板(是否可见 True),再 读取文档 输出全文,确认你能读出来。

任务 B(能定位):用 查找文本后设置光标位置 找到 $姓名$(相对位置选"选中文本"),再用 写入文字 把它替换成"张三"。

任务 C(能生成):同样处理 $分数$,换成 95,然后 文档另存为 到 res\张三.docx,关闭文档。打开生成的文件核对。

任务 D(进阶,选做):把任务 B/C 放进 For Each,用 Excel 里两行数据生成两份文档。卡住就把源码视图发我,我们一起看。

任务 E(排错演练):故意把命令里的 $姓名$ 改成 $名字$ 再跑一次,观察结果——是查找失败、还是写到了别处?把现象记下来,这就是"标记不一致"的典型表现。

命令找不到、属性不知道填哪个,直接把截图或报错发我。

精读一手来源

本节首选:《开发者指南(第一辑)· 软件自动化 · Word 自动化》(含焦点、标记技巧的截图)。 查命令参数:命令手册 搜"Word"。