第 7 课 · 第四部分 Excel 自动化

Excel 自动化:让机器人替你填表算数

认证里分值最高的一块,也是真实办公中最常用的机器人。

学习目标

预计用时:读课 45 分钟 + 上机 40 分钟 |  前置知识:第 3 课(变量)、第 5 课(循环)、第 6 课(数组与二维数组、数据表) |  本课性质:实操课(认证高分值 + 办公最常用),需要边读边在 Windows 上做

知识地图

第 6 课让你学会了装数据、加工数据的数组和字典;本课把容器接上真实的 Excel 文件——读出来的内容正好落在第 6 课的二维数组/数据表上,处理完再写回去。它是第四部分"四类办公自动化"的第一站,也是分值最高的一站。

本课在哪儿
第四部分 · Excel 自动化。它是第 6 课数组知识的第一个落地场景,后面 Word、邮件、浏览器都沿用同样的"打开/操作/收尾"套路。
重点
三个概念的层级;标准四步;读取区域返回二维数组;写入数据必须与范围形状一致。
难点
"工作表整数从 0、单元格 [行,列] 从 1"这一对反直觉的编号规则。
学完的标志
不看笔记,你能搭出一个"打开表格 → 读一片区域 → 逐行处理 → 写回并保存 → 关闭"的完整流程,并能自己排查路径、环境、文件占用三类报错。

一、三个概念,先分清

官方把 Excel 拆成三个层次:[1]

概念是什么关系
工作簿一个 .xlsx 文件一个工作簿 = 多个工作表
工作表文件里的一张表默认三张:Sheet1 / Sheet2 / Sheet3
单元格表里的一格,用"列号+行号"定位如 B3 = 第 3 行第 2 列

一层套一层的记法:工作簿(笔记本)→ 工作表(笔记本里的一页)→ 单元格(这一页上的一个小格)。所有命令要操作什么,都得先说清"哪本笔记本、哪一页、哪一格"。

二、标准四步:这是 Excel 机器人的骨架

① 打开打开Excel
② 读写读取/写入单元格、区域
③ 保存保存Excel
④ 关闭关闭Excel工作簿
Excel 机器人标准四步:打开、读写、保存、关闭;工作簿包含工作表,工作表包含单元格 Excel 机器人的骨架:打开 → 读写 → 保存 → 关闭 四步成对出现;所有读写都挂在“打开”输出的工作簿变量上。 ① 打开 打开 Excel 存进工作簿变量 ② 读写 读取 / 写入 单元格或区域 ③ 保存 保存 Excel 立即保存或最后落盘 ④ 关闭 关闭工作簿 与打开成对 三层对象:文件 → 表 → 格子 整个文件 工作簿 objExcelWorkBook 文件里的一张表 工作表 用编号 0 或表名指定 表里的一个格子 单元格 A1 / [1,1] 打开时输出到 objExcelWorkBook,后面每条读写都要引用它,机器人才知道动哪一本。
图 6 · 四步成对:打开拿到工作簿对象,读写都引用它,保存后关闭;工作簿、工作表、单元格是三层包含关系。

所有后续操作都挂在工作簿对象这个变量上——打开时存进哪个变量,读写时就要引用哪个变量。

为什么要有"对象变量"这一步?电脑里可能同时开着好几个 Excel 文件。机器人不像人能"看窗口标题",它只能靠你给的变量名认准"我说的就是刚才打开的这一本"。所以打开命令的"输出到"填了 objExcelWorkBook,后面每条读写命令都得再写一遍 objExcelWorkBook,它才知道该动哪个文件。

Excel 机器人骨架(标准四步,示意写法)
// ① 打开:把工作簿存进变量 objExcelWorkBook
打开Excel  文件路径=@res"模拟数据.xlsx"  是否可见=True  输出到=objExcelWorkBook

// ② 读:读一片区域,得到二维数组 arrData
读取区域  工作簿对象=objExcelWorkBook  工作表=0  区域="A1:F2"  输出到=arrData

// ② 写:把结果写回某个格子
写入单元格  工作簿对象=objExcelWorkBook  工作表=0  单元格="H1"  数据="已处理"  立即保存=是

// ③ 保存:若上面"立即保存"都选了"否",这里是最后的落盘机会
保存Excel  工作簿对象=objExcelWorkBook

// ④ 关闭:释放后台资源
关闭Excel工作簿  工作簿对象=objExcelWorkBook  立即保存=是

记住:打开和关闭是成对的。中间夹着读和写。少了关闭,Excel 会一直趴在后台。

三、第 ① 步:打开 Excel

软件自动化 ▸ Excel ▸ 打开Excel,关键属性:[1]

属性说明
文件路径支持 xls / xlsx / xlsm。文件不存在会自动新建一个空白工作簿
是否可见True 显示 Excel 界面;False 后台静默运行
输出到填入一个变量名(工作簿对象),后续命令都要用它

相对路径写法:专业模式下用 @res"模拟数据.xlsx",表示流程文件夹下 res 文件夹里的文件。绝对路径推荐用普通模式点文件夹图标选。

  1. 在命令区找到 软件自动化 ▸ Excel ▸ 打开Excel,拖进流程。
  2. 选中它,在属性区的"文件路径"里选定要打开的 .xlsx。看不到文件?说明路径或文件名不对。
  3. "是否可见"第一次调试时选 True,能亲眼看到机器人打开表、改数据,方便排查。
  4. "输出到"填一个你自己起的变量名(如 objExcelWorkBook)。
  5. 运行到这步,期望看到:Excel 窗口弹出、打开了指定文件;如果路径指向的文件不存在,会得到一个新建的空白工作簿。

调试期开可见,交付时改不可见:开发时"是否可见=True"能一眼看出错在哪;流程稳定后改 False,机器人就在后台安静干活,不抢你的鼠标和屏幕。

四、第 ② 步:读数据

4.1 读一个格子:读取单元格

属性填:工作簿对象、工作表、单元格、输出到。输出的类型跟格子内容一致——数字就是数值,文字就是字符串。

4.2 读一片:读取区域(重点)

读取区域 一次把一个矩形区域全读出来,结果是二维数组(正好用上第 6 课):

读取 A1:F2
区域属性填 "A1:F2"
输出到 arrayRet
// arrayRet 的样子:
// [[ "刘备","关羽","张飞","赵云","马超","黄忠" ],
//  [ "20K","18K","15K","12K","10K","10K" ]]

拿到二维数组后,配合 For Each 就能一行一行地处理——这就是"批量处理一列数据"的标准套路。

读取单元格 vs 读取区域,怎么选?只要一个值(某个汇总数、某人的工资),用 读取单元格,结果直接是数值或字符串;要一整片(一列名单、一张明细),用 读取区域,结果是可以循环的二维数组。选错了要么多绕一圈,要么得到的类型用不上。

易错点(忘了第 6 课):读取区域的结果是二维数组,取值要写两组下标——arrayRet[0][0] 才是第一行第一列。只写 arrayRet[0] 拿到的是"第一行"整个数组,不是第一个值。

五、第 ② 步:写数据

写入单元格 的属性里,除了工作簿对象/工作表/单元格,还有两个关键项:

考试爱考的一条:"数据"必须和写入范围大小匹配——写一个格子给一个值;写一行要给一维数组且长度等于列数;写一块区域要给二维数组。不匹配会报错或写错位。范围不确定时可用 创建多维数组 命令先造数组。

易错点(维数不匹配):最常见的两种翻车——往 1 个格子塞整个数组(多给了),或往 2×2 区域塞 3 个元素的一维数组(形状对不上)。记住口诀:格子对单值、一行对一维、一片对二维。

易错点(忘了保存):"立即保存"选了"否",写着随手关了流程,表格里看着有数,其实硬盘上的文件一点没变。改完一定确认:要么写的时候选"立即保存=是",要么流程结尾有 保存Excel,要么关闭命令里"立即保存=是"。

六、工作表/单元格的两种指代方式

这是 Excel 部分的高频考点:[1]

方式工作表单元格适合
字符串(Excel 习惯)"Sheet1""A1"给业务人员看,直观
整数 / 数组0(第一张,从 0 起)[1, 1](行 1 列 1,从 1 起)配合循环、变量,灵活

千万别混:工作表的整数编号从 0 开始;单元格 [行, 列] 的编号从 1 开始(为了贴近 Excel 习惯)。[1,1] 就是 "A1",[1,2] 就是 "B1"。

你想要的格子Excel 写法数组写法
第 1 行第 1 列"A1"[1, 1]
第 1 行第 2 列"B1"[1, 2]
第 3 行第 2 列"B3"[3, 2]

记忆口诀:"表从 0,格从 1"。工作表是"从第几张开始数"(程序员数法),单元格是"第几行第几列"(Excel 数法)。混用时在纸上写一遍 [1,1] = A1 对照,两遍就记牢了。

七、别忘第 ④ 步:关闭

操作完必须 关闭Excel工作簿。尤其是打开时选了"不可见"的情况——界面虽然看不见,Excel 其实一直在后台跑着,占资源还难发现。[1]

易错点(忘了关闭):流程没关闭工作簿就跑完了,你会遇到:后台残留多个 Excel 进程越积越多、文件被占用导致下一次运行打不开或写不进去、手动也删不掉文件。养成习惯——只要写了"打开Excel",流程末尾一定配一条 关闭Excel工作簿。

完整命令属性见 参考页:Excel 命令速查。

本课小结

必记要点

工作簿 一个 .xlsx 文件 工作表 文件里的一页 单元格 表里的一小格 工作簿对象 打开命令的输出变量 读取区域 返回二维数组 立即保存 写完就落盘 @res 流程文件夹下的 res 目录 表 0 格 1 表从 0 起、格从 1 起

自测

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

上机实践(回到 Windows)

准备:在流程文件夹下建 res 目录,放一个 模拟数据.xlsx,A1:F2 填点数据(比如 6 个姓名 + 6 个数字)。确保机器上装有 Excel(2007 以上)或 WPS(2016 以上)。

任务 A(打开):用 打开Excel 打开它,输出到 objExcelWorkBook,是否可见选 True。

任务 B(读一片):用 读取区域 读 "A1:F2",输出调试信息看看二维数组长什么样。

任务 C(两种指代):改用第二种指代方式读同一片区域:工作表填 0,区域填 [[1,1],[2,6]],确认结果一样。这一步能帮你记牢"表从 0、单元格从 1"。

任务 D(写 + 关闭):用 写入单元格 把 A1 改成你的名字,"立即保存"选"是",然后 关闭Excel工作簿。用 Excel 打开文件确认真的改掉了。

任务 E(故意制造报错 + 三类排查):这是本课最重要的一步,别跳。

  1. 制造"维数不匹配":用 写入区域 往 2×2 区域写一个只有 3 个元素的一维数组,运行。记下报错,理解"数据形状必须与区域一致"。
  2. 制造"路径问题":把"文件路径"改成一个不存在的目录下的文件名(如 D:\没有的文件夹\test.xlsx),运行。观察报错——注意"文件不存在会自动新建工作簿"指的是新建文件,它不会替你新建不存在的文件夹。
  3. 制造"文件被占用":先用 Excel/WPS 手动打开 模拟数据.xlsx 并保持不关,再运行一个"写入并保存"的流程。记下现象;然后关掉手动打开的窗口重跑,看是否恢复正常。

报错排查清单(按顺序过一遍):

把每次的报错原文 + 你的命令属性截图发我。

精读一手来源

本节首选:《开发者指南(第一辑)· 软件自动化 · Excel 自动化》,它把每条命令的属性和运行结果都配了截图。 查具体参数用 命令手册 搜"Excel"。 命令与编号规则速查见 参考页:Excel 命令速查。