☰
影刀RPA新手教程:跨工作簿取数——引用其他文件的正确姿势
2026/10/11 13:28:18 网站建设 项目流程

影刀RPA新手教程:跨工作簿取数——引用其他文件的正确姿势

库存表在A文件,价格表在B文件,最后要合成一张对账表——跨工作簿取数是Excel自动化里最常见的组合需求,也是新手最容易把流程写乱的地方。用影刀RPA做这件事,核心就一句话:每个文件一个Excel对象,变量管清楚,谁也不串。

我早期做的第一个对账流程就翻过车:同时开两个文件,读A文件的数据写进了B文件,指挥对象搞混了。排查半天才发现是【打开/新建Excel】输出的对象变量没分开命名,一个叫excel1一个也叫excel1,指令面板里一眼扫过去根本分不清谁是谁。从那以后我给对象变量命名定了个死规矩,再没出过错。

这篇就把跨工作簿取数的正确姿势从头到尾写清楚:先讲对象变量这个核心概念,再讲多文件读写的标准链路,然后给出完整的对账案例和排错表。

一、核心概念:Excel对象是跨文件操作的钥匙

影刀RPA里不存在"当前打开的是哪个文件"这种模糊说法,一切靠对象变量。【打开/新建Excel】指令运行后,会把Excel对象保存到你指定的变量里,官方文档的原话是:保存新建或打开的Excel文件对象为变量,后续流程用到该表格时,可直接调用该变量。

标准做法是给每个文件起一眼能看懂的对象名:

  • 库存表对象:inventory_obj
  • 价格表对象:price_obj
  • 汇总表对象:summary_obj

【打开/新建Excel】指令的配置要点:启动方式选"新建Excel"或"打开已有的Excel",后者填绝对路径,比如"C:\测试表格.xlsx"这种完整路径;驱动方式按机器情况选,office驱动对xls和csv支持好,WPS驱动对WPS表格支持好,openpyxl驱动不需要装Office就能跑,但公式会以字符串形式读出来而不是计算结果;是否可视化按需勾选,自动化跑批建议不勾。

还有一个指令叫【获取当前激活的Excel对象】,能拿到当前正开着的文件对象,适合对接别人手动打开的文件。但跨文件场景我建议统一用【打开/新建Excel】显式打开,每个文件的对象都是自己创建的,变量清清楚楚,出错概率低得多。

对象变量的生命周期也要心里有数:变量在流程运行期间一直有效,【关闭Excel】执行后对象就失效了,再用它会报错。所以合并多文件时,别提前关掉还要用的文件,正确顺序是全部读完、合并完、写入完,最后统一关闭。中途确实要关的,关之前把数据已经读进变量里,后面操作的是数据不是对象。

二、多文件读写标准链路:开两个,各读各的

链路只有四步,顺序不能乱,乱了就会出我开头说的"写错文件"事故。

  1. 【打开/新建Excel】打开库存表,对象存入inventory_obj。
  2. 再拖一个【打开/新建Excel】打开价格表,对象存入price_obj。两个指令是并列关系,不是嵌套。
  3. 【读取Excel内容】分别对两个对象操作:读取方式选"区域内容"或"已使用区域内容",读出来的是二维列表,存成两个数据变量。
  4. 数据在变量层面对齐合并后,用【写入内容至Excel工作表】写入汇总表,最后每个对象都执行【关闭Excel】,一个都不能漏。

写入方式的选择也值得单独说一句。汇总表如果是每次全量重算,就用覆盖方式从固定位置写,写之前把旧数据清掉,避免残留;如果是增量对接,才用追加方式。新手最常见的错误是重复运行时一直追加,同一批数据在表里堆了三遍,对账时怎么都对不上。我的做法是写入前先判断汇总表里有没有本次批次的数据,有就先删再写,保证幂等。

读取时有几个参数直接影响数据质量,官方文档写得明白:单元格读到的是字符串,行和列读到一维列表,区域和已使用区域读到二维列表;"读取单元格显示的内容"这个勾选项,控制整数会不会读成1.0这种小数、日期会不会读成日期对象,勾上则返回可见的内容;"清除单元格前后空格"建议勾上,自动清除内容前后的空格及换行符,脏数据少一半。

如果两个文件的Sheet页不固定,先用【获取Sheet页名称】指令把所有Sheet页名取出来,Sheet页范围选"所有Sheet页名称",返回一个列表,再用ForEach列表循环逐个处理。把Sheet名写死在指令里是常见的偷懒,表改个名流程就崩了。

三、完整案例:库存对账表合并

场景:库存表和价格表都有商品编码列,要把价格表的售价按编码匹配回库存表,算出库存金额。这是电商公司天天干的活。

  • 第一步:开库存表,读全部数据到stock_data。
  • 第二步:开价格表,读全部数据到price_data。
  • 第三步:把price_data转成字典,商品编码做键,售价做值,查找复杂度从O(n)降到O(1)。数据量大时这一步是性能分水岭。
  • 第四步:For循环遍历stock_data,按编码去字典查售价,算金额,拼成新行。
  • 第五步:【写入内容至Excel工作表】写入汇总表,写入方式选"覆盖一行"从第2行开始写,或者选"追加一行"自动接在末尾。

匹配逻辑的Python核心就几行:

# 输入:stock_data 库存二维列表,price_data 价格二维列表# 输出:result 合并后的二维列表,直接交给写入指令price_map={}# 第0行是表头,从第1行开始遍历价格表forrowinprice_data[1:]:price_map[str(row[0]).strip()]=row[2]# 编码做键,售价做值result=[['商品编码','库存数量','售价','库存金额']]forrowinstock_data[1:]:code=str(row[0]).strip()qty=row[1]price=price_map.get(code,0)# 查不到默认0,避免KeyError中断流程result.append([code,qty,price,float(qty)*float(price)])

查不到编码时用get给默认值而不是直接报错,这个习惯能帮你避免"跑到八千行突然中断"的惨案。真实数据里编码永远是脏的:带空格的、前导零丢了的、数字变文本的,strip清洗是最起码的尊重。

三张表以上的合并,思路完全一样,只是字典多建几个。比如库存、价格、店铺三张表,就建两个字典,主循环里挨个查,查不到都给默认值并记一条日志。数量再往上,别手写循环了,直接上pandas的merge,按编码列一次join完,几百行代码变几行。这里给一个三表的扩展提示:

  • 每张表读出来后先各自清洗编码列,统一格式再建字典。
  • 主表用哪张要提前定:一般以行数最全的那张为主表,别的表往它身上补数据。
  • 匹配结果里查不到的行单独存一个"异常清单",写入另一个Sheet页,别混在正常数据里。

四、数据来源是网页时怎么衔接

对账的数据常常不是从Excel来的,而是从淘宝、拼多多这些平台网页上采集的。这时候链路变成:网页采集 → 存变量 → 写入Excel → 再跨工作簿合并,前端多一节,后面的取数逻辑一模一样。

网页侧的关键动作:用【获取相似元素列表】抓整页商品行,循环里对每一行做元素提取。定位时XPath和CSS选择器各有分工,我常用XPath做模糊匹配:

# 捕获元素:商品列表里每一条商品标题 //div[@class="goods-list"]//a[@class="title"] # 捕获元素:下一页按钮,且必须不带disabled样式,用来判断还能不能翻页 //a[@id="paging_next" and not(contains(@class,"disabled"))] # 模糊匹配:查找包含"累计销售"文本的汇总单元格 //*[contains(text(),'累计销售')]

CSS选择器胜在写法短,比如 .goods-list .title,类名规整的页面优先用它;结构乱、需要按文本或层级找的,XPath更灵活。两者并列掌握,按页面情况切换,别死磕一种。采完的数据先存二维列表变量,落表时和Excel侧的数据格式对齐,合并就顺了。

五、十二模块联动:跨工作簿取数在知识体系里的位置

跨文件操作是个"缝合"场景,几乎每个模块都会被牵到。对照下面这12条自查一遍,取数流程就稳了。

  1. 认识与安装:装好影刀RPA客户端和浏览器插件,先跑通一个单文件流程再玩多文件,别一上来就缝合。
  2. 元素定位四合一:数据来自网页时,元素捕获、XPath、CSS选择器、正则缺一不可。
  3. 变量与数据类型:对象变量、二维列表、字典是这条链路的三大件,字典键不存在用get方案兜底,这是官方文档里讲的两个方案之一。
  4. 流程控制:ForEach列表循环处理Sheet页,If判断编码是否存在,Try-Catch包住整个读写链路。
  5. 网页自动化:翻页用disabled样式判断,懒加载用滚动加index去重,采完再落表。
  6. 数据处理:本篇主战场,读取、合并、写入、追加全在这。
  7. 鼠标键盘图像:偶尔需要人工点一下导出按钮时,模拟点击救场,驱动模式比模拟模式稳。
  8. 进阶技能:数据量大时Python的pandas做merge,比循环匹配快得多,几行代码顶几百次循环。
  9. 平台实战:小红书、淘宝采集的数据最终都要进表,链路是通的,采集输出格式固定下来最省事。
  10. 系统联动:合并完成给飞书群发一条结果通知,运营不用盯着;定时任务把整个链路挂到每天早上自动跑。
  11. 工程化规范:把"两个表按键合并"封装成子流程,传参数进出,别的项目直接复用。
  12. 速查表:对象搞混、Sheet名不对、编码带空格,这些高频错要形成肌肉记忆。

六、易错速查表

现象原因处理
数据写进了错的文件两个Excel对象变量混淆对象名按文件语义命名
读取结果只有字符串openpyxl驱动的特性需要公式值换office驱动
编码匹配全失败编码列混入空格或数字变文本strip清洗,统一文本格式
Sheet页报不存在页名写死但实际改名了用获取Sheet页名称动态取
流程结束文件还开着忘了关闭对象每个对象都配关闭Excel
匹配到一半流程中断字典键不存在抛异常get加默认值兜底

七、延伸阅读与学习资源

官方文档里"打开/新建Excel"“读取Excel内容”"获取Sheet页名称"三篇指令说明是本篇的基础,参数定义都出自那里,建议对照着把指令面板点一遍,比光看文章记得牢。影刀学院Excel自动化课程里有多表协同的完整演示,值得照着做一遍。

整套跨工作簿对账的流程源码,包括网页采集、双表合并、结果落表三个子流程,我放在代码仓库 home.linyan.cloud,可以直接参考改造,换成你自己的表结构就能上线。


#影刀RPA #RPA自动化 #Excel #表格处理 #数据处理

作者:林焱

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询