Excel 自动化:让机器人替你填表算数
认证里分值最高的一块,也是真实办公中最常用的机器人。
学习目标
- 分清工作簿、工作表、单元格三个概念,说出它们的包含关系
- 背下"打开 → 读写 → 保存 → 关闭"标准四步,并知道每一步用哪条命令
- 会用
打开Excel并填对文件路径、是否可见、输出到三个属性 - 用
读取单元格取一个值、读取区域一次取一片(得到二维数组) - 用
写入单元格回写数据,说清"数据匹配规则"和"立即保存"的作用 - 记住"工作表从 0、单元格从 1",并解释为什么必须关闭工作簿
预计用时:读课 45 分钟 + 上机 40 分钟 | 前置知识:第 3 课(变量)、第 5 课(循环)、第 6 课(数组与二维数组、数据表) | 本课性质:实操课(认证高分值 + 办公最常用),需要边读边在 Windows 上做
知识地图
第 6 课让你学会了装数据、加工数据的数组和字典;本课把容器接上真实的 Excel 文件——读出来的内容正好落在第 6 课的二维数组/数据表上,处理完再写回去。它是第四部分"四类办公自动化"的第一站,也是分值最高的一站。
一、三个概念,先分清
官方把 Excel 拆成三个层次:[1]
| 概念 | 是什么 | 关系 |
|---|---|---|
| 工作簿 | 一个 .xlsx 文件 | 一个工作簿 = 多个工作表 |
| 工作表 | 文件里的一张表 | 默认三张:Sheet1 / Sheet2 / Sheet3 |
| 单元格 | 表里的一格,用"列号+行号"定位 | 如 B3 = 第 3 行第 2 列 |
一层套一层的记法:工作簿(笔记本)→ 工作表(笔记本里的一页)→ 单元格(这一页上的一个小格)。所有命令要操作什么,都得先说清"哪本笔记本、哪一页、哪一格"。
二、标准四步:这是 Excel 机器人的骨架
所有后续操作都挂在工作簿对象这个变量上——打开时存进哪个变量,读写时就要引用哪个变量。
为什么要有"对象变量"这一步?电脑里可能同时开着好几个 Excel 文件。机器人不像人能"看窗口标题",它只能靠你给的变量名认准"我说的就是刚才打开的这一本"。所以打开命令的"输出到"填了 objExcelWorkBook,后面每条读写命令都得再写一遍 objExcelWorkBook,它才知道该动哪个文件。
// ① 打开:把工作簿存进变量 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 文件夹里的文件。绝对路径推荐用普通模式点文件夹图标选。
- 在命令区找到
软件自动化 ▸ Excel ▸ 打开Excel,拖进流程。 - 选中它,在属性区的"文件路径"里选定要打开的
.xlsx。看不到文件?说明路径或文件名不对。 - "是否可见"第一次调试时选
True,能亲眼看到机器人打开表、改数据,方便排查。 - "输出到"填一个你自己起的变量名(如
objExcelWorkBook)。 - 运行到这步,期望看到:Excel 窗口弹出、打开了指定文件;如果路径指向的文件不存在,会得到一个新建的空白工作簿。
调试期开可见,交付时改不可见:开发时"是否可见=True"能一眼看出错在哪;流程稳定后改 False,机器人就在后台安静干活,不抢你的鼠标和屏幕。
四、第 ② 步:读数据
4.1 读一个格子:读取单元格
属性填:工作簿对象、工作表、单元格、输出到。输出的类型跟格子内容一致——数字就是数值,文字就是字符串。
4.2 读一片:读取区域(重点)
读取区域 一次把一个矩形区域全读出来,结果是二维数组(正好用上第 6 课):
区域属性填 "A1:F2"
输出到 arrayRet
// arrayRet 的样子:
// [[ "刘备","关羽","张飞","赵云","马超","黄忠" ],
// [ "20K","18K","15K","12K","10K","10K" ]]
拿到二维数组后,配合 For Each 就能一行一行地处理——这就是"批量处理一列数据"的标准套路。
读取单元格 vs 读取区域,怎么选?只要一个值(某个汇总数、某人的工资),用 读取单元格,结果直接是数值或字符串;要一整片(一列名单、一张明细),用 读取区域,结果是可以循环的二维数组。选错了要么多绕一圈,要么得到的类型用不上。
易错点(忘了第 6 课):读取区域的结果是二维数组,取值要写两组下标——arrayRet[0][0] 才是第一行第一列。只写 arrayRet[0] 拿到的是"第一行"整个数组,不是第一个值。
五、第 ② 步:写数据
写入单元格 的属性里,除了工作簿对象/工作表/单元格,还有两个关键项:
- 数据:要写入的内容。普通模式按文本写入;专业模式可填数值、变量、表达式。
- 立即保存:选"是"就像改完立刻按了 Ctrl+S;选"否"则要等后面调用
保存Excel或关闭Excel工作簿(其"立即保存"设为是)才落盘。
考试爱考的一条:"数据"必须和写入范围大小匹配——写一个格子给一个值;写一行要给一维数组且长度等于列数;写一块区域要给二维数组。不匹配会报错或写错位。范围不确定时可用 创建多维数组 命令先造数组。
易错点(维数不匹配):最常见的两种翻车——往 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)⊃ 工作表 ⊃ 单元格。
- 标准四步:打开Excel → 读取/写入 → 保存Excel → 关闭Excel工作簿,打开与关闭成对出现。
- 打开Excel 三属性:文件路径(不存在会自动新建空白工作簿)、是否可见、输出到(工作簿对象)。
- 读取单元格得单值;读取区域得二维数组,配 For Each 逐行处理。
- 写入数据必须与范围形状一致;"立即保存=是"等于写完就 Ctrl+S。
- 编号规则:工作表从 0、单元格 [行,列] 从 1,
[1,1]即A1。 - 必须关闭工作簿,否则后台占进程、文件被占用。
自测
不看上面,凭记忆作答。答错不要紧,解析会告诉你为什么。
上机实践(回到 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(故意制造报错 + 三类排查):这是本课最重要的一步,别跳。
- 制造"维数不匹配":用
写入区域往 2×2 区域写一个只有 3 个元素的一维数组,运行。记下报错,理解"数据形状必须与区域一致"。 - 制造"路径问题":把"文件路径"改成一个不存在的目录下的文件名(如
D:\没有的文件夹\test.xlsx),运行。观察报错——注意"文件不存在会自动新建工作簿"指的是新建文件,它不会替你新建不存在的文件夹。 - 制造"文件被占用":先用 Excel/WPS 手动打开
模拟数据.xlsx并保持不关,再运行一个"写入并保存"的流程。记下现象;然后关掉手动打开的窗口重跑,看是否恢复正常。
报错排查清单(按顺序过一遍):
- 环境:是否装了 Excel 2007 以上或 WPS 2016 以上?版本过低会导致命令直接不可用。
- 路径:绝对路径有没有写错盘符或目录?用
@res时,文件是否真的放在流程文件夹 / res / 下? - 文件占用:手动打开的表格先关掉;再打开任务管理器看看有没有残留的 Excel/WPS 进程(多半是上次忘了
关闭Excel工作簿),清掉再试。 - 形状:写入数据的维数、长度,是否和目标范围完全一致?
把每次的报错原文 + 你的命令属性截图发我。
精读一手来源
本节首选:《开发者指南(第一辑)· 软件自动化 · Excel 自动化》,它把每条命令的属性和运行结果都配了截图。 查具体参数用 命令手册 搜"Excel"。 命令与编号规则速查见 参考页:Excel 命令速查。