简介这份资料面向需要处理表格数据并自动推送消息的职场人士、RPA初学者及办公自动化爱好者提供一套基于UiBot的微信版机器人源码与配套使用视频。机器人支持按自定义条件筛选表格数据并将结果发送给指定的微信好友或群聊适用于销售数据整理、客户通知分发、日报自动推送等重复性工作场景源码注释清晰、可按个人需求修改视频则演示了从配置、运行到调试的完整过程能快速了解表格筛选逻辑与微信消息发送机制的配合。压缩包采用7z格式大小约15.36MB主要包含可直接编辑的源代码文件和使用演示视频可帮助学习UiBot流程设计、条件判断与群发消息等关键模块也可供关注按键精灵、人工智能等自动化方案的读者参考。目前已有1443人学习下载适合希望借助RPA机器人降低人工操作成本、提升办公效率的读者入门与二次开发。1. 表格筛选用 RPA 做为什么偏要送到微信里每天上午十点销售助理打开 Excel筛选出金额大于一万的订单复制明细再打开微信粘贴到群里。这个动作重复了三个月中间漏过两次数据、发错过一次群。用 UiBot 把“表格数据筛选”和“发送机器人微信版”串成一条自动化流程就是把这个 15 分钟的人工操作变成 30 秒的定时任务UiBot 读表、按规则筛、拼成消息文本、通过微信机器人推送到群里。这个标题真正在讲的是一个通用套路——凡是“每天从表格里挑数据发到群里”的活都能用这套方案换掉手抄。适合正在用 Excel 做日报、库存预警、订单汇总的运营和财务也适合想给团队搭一套轻量数据推送的运维。下面从选型到落地一步步拆开说清楚。2. 拆开“筛选发送”这三个选型决定后面省不省事2.1 UiBot 处理表格的三条路径界面指令、数据库查询、JS 脚本哪条最稳UiBot 处理 Excel 数据常见有三条路第一条是用 UiBot 自带的 Excel 自动化指令比如“打开 Excel”“读取单元格”“筛选行”。这套指令的好处是上手快拖拽动作就能生成流程坏处是它本质上在模拟“人操作 Excel”要等界面响应速度慢而且一旦目标表格被其他人打开、弹出“工作簿被锁定”的弹窗流程就会卡死。第二条路是把数据放进数据库再查询。如果公司已经有 MySQL 或 SQL Server把 Excel 导入临时表后用 SQL 做 WHERE 筛选性能和稳定性都很好。但这要求你有数据库权限还要写导入导出逻辑对一个小报表需求来讲有点重。第三条路最推荐用 UiBot 的 JavaScript 引擎直接处理数据。UiBot 底层支持 JavaScript 语法你可以用“运行 JS”指令在内存里把 Excel 数据读成二维数组再用数组的 filter 方法按条件筛选。这样不依赖 Excel 界面十万行数据也是毫秒级处理而且筛选逻辑写在代码里改条件不用重新拖拽流程。我做这类需求时默认走这条路径。2.2 微信侧发送通道个人微信、企业微信机器人、第三方推送边界差异很大“发送机器人微信版”这个说法有歧义实际操作中有三种通道选错后面全是坑。第一种是用 UiBot 操作个人微信 Windows 客户端模拟人复制粘贴发消息。这是老教程里最常见的做法但最近微信客户端版本频繁改动网页版又受限模拟操作经常出现“窗口找不到”“发送失败”再加上个人微信本身不允许自动化群发账号存在风控风险。我不建议把它作为首选方案。第二种是企业微信机器人 Webhook这是目前最稳健的通道。你在企业微信群里添加一个“群机器人”会得到一个 Webhook 地址UiBot 用 HTTP POST 请求向这个地址推送 JSON 格式的消息微信群所有成员都能收到。它免费、不需要额外安装客户端、不需要处理微信登录状态而且消息支持 Markdown 格式。钉钉、飞书也有同样机制的机器人接口结构几乎一致。第三种是把数据推到第三方推送平台比如 Server 酱再由平台转发到你的微信。这种方式适合“只推给自己”的场景比如个人盯数据但推送到群聊时要额外配置且多一跳就多一个故障点。个人微信适合自己试玩企业微信机器人适合团队落地。下面的操作全部基于企业微信机器人通道因为它的成功率最高、排错最简单。2.3 一条完整流程该由哪几个节点组成把标题里的功能拆成流程节点顺序是定时触发 - 读取 Excel - 按条件筛选 - 拼接消息文本 - 调用微信机器人接口 - 记录日志。其中“筛选”和“发送”是核心”定时触发”和“日志”是让流程能长期稳定跑下去的保障。有一点容易被忽略很多人把“筛选”做成 UiBot 去桌面端 Excel 里点“筛选按钮”这在脚本运行时能成功但只要表格结构稍有变化就翻车。正确做法是把数据读到内存里做筛选最后只把筛选结果写成文本。这样即使 Excel 文件被移动、重命名只要路径更新就能继续跑。3. 用 UiBot 从 Excel 里筛数据脚本筛选 vs 界面筛选该选哪套3.1 先建一个“读取 筛选”的最小流程把整张表读进内存在 UiBot Creator 里新建一个“数据处理”流程第一步用“Excel/打开”指令读取文件。这里要注意UiBot 打开 Excel 时可以选择是否“可见”我建议运行阶段设为不可见既可以避免弹窗干扰也能减少内存占用。接着用一个“Excel/读取区域”的指令把整张工作表读出来。当你选择“读取全部已使用区域”时UiBot 会把它变成一个二维数组输出相当于把这张表整个快照进内存。这个快照可以传递给后面的 JavaScript 代码块后续所有筛选都基于这个数组不再触碰 Excel 进程。// UiBot 的“运行 JS”指令里写这段代码 // 假设前面读取出来的二维数组变量名是 excelData function filterRows(data, filterColumnIndex, threshold) { // data: 二维数组第一行通常是表头 // filterColumnIndex: 按第几列筛选从 0 开始计数 // threshold: 数值阈值只保留大于该值的行 var header data[0]; // 取表头行 var result [header]; // 结果数组先放表头 for (var i 1; i data.length; i) { var row data[i]; var cellValue parseFloat(row[filterColumnIndex]); // 跳过空值和无法转换为数字的行 if (isNaN(cellValue)) continue; if (cellValue threshold) { result.push(row); } } return result; } // 调用筛选函数比如筛选第 5 列即“金额”列大于 10000 的数据 var filtered filterRows(excelData, 4, 10000);这段代码的逻辑先取出表头行放到结果数组的第一行然后逐行读取指定列的值用 parseFloat 把文本转成数字。这里用 parseFloat 而不是 Number是因为 Excel 读出来的单元格可能是字符串格式比如“12,000.00”直接用 Number 会得到 NaN而 parseFloat 能处理纯数字文本。isNaN 检查专门过滤空单元格和纯文本行否则一个空行会让流程在后续发送环节报错。3.2 筛选条件写进配置表每次改条件不用改代码、不用碰流程直接在上面的代码里改阈值第一次用没问题但用两天你就会发现每次调整筛选条件都要打开 UiBot 编辑器、找到这段代码、改数字、重新发布。这个动作太原始了。我一般会把筛选条件外置到一个配置文件里UiBot 流程启动时先读这个文件再把参数传给 JS 代码。配置文件可以是简单的文本格式也可以用 JSON。UiBot 的“文件/读取”指令能把整个文件读成字符串再用 JavaScript 的 JSON.parse 解析。// config.json 文件内容示例 { excelPath: D:/report/sales_2025.xlsx, sheetName: Sheet1, filterColumnIndex: 4, filterType: greaterThan, threshold: 10000, groupName: 销售一部 } // UiBot 运行 JS 中读取配置 var fs require(fs); var config JSON.parse(fs.readFileSync(D:/report/config.json, utf-8)); // 之后直接用 config.threshold、config.filterColumnIndex 替代硬编码这样做的价值在于运营同事要改筛选阈值时直接用记事本改 config.json 里的 threshold 就行不需要打开 UiBot、不需要理解代码。这个习惯对任何 RPA 项目都适用——把参数从代码里搬出来流程才能交给不懂代码的人维护。3.3 把筛选结果拼成“能发出去的消息”这一步决定群里的阅读体验筛选完成后数据还在二维数组里微信机器人接口不能直接收二维数组所以要先拼成字符串。这里建议直接用 Markdown 格式因为企业微信机器人支持 Markdown 消息类型表格渲染效果远好过纯文本。// 把筛选结果拼成 Markdown 文本 function buildMarkdown(filteredData, config) { var lines []; lines.push(## 销售日报自动推送); lines.push( 筛选条件金额大于 config.threshold); lines.push(); lines.push(| 订单号 | 客户名称 | 金额 | 状态 |); lines.push(| --- | --- | --- | --- |); for (var i 1; i filteredData.length; i) { var row filteredData[i]; // 按列索引拼接注意把数字格式化成两位小数 var orderId row[0]; var customer row[1]; // 金额列加粗显示 var amount parseFloat(row[4]).toFixed(2); var status row[7] || ; lines.push(| orderId | customer | ** amount ** | status |); } // 末尾追加汇总统计 var total 0; for (var j 1; j filteredData.length; j) { total parseFloat(filteredData[j][4]); } lines.push(); lines.push(**合计金额 total.toFixed(2) 元**); lines.push(**共 (filteredData.length - 1) 条记录**); return lines.join(\n); } var markdownText buildMarkdown(filtered, config);这段代码里有两个细节值得注意。一是金额列用 toFixed(2) 格式化避免出现 1234.5 和 1234.50 混排的局面。二是拼接 Markdown 表格时一列内容里不能有竖线符号否则表格会错位如果客户名称里带“|”或换行要提前 replace 掉这个小坑我踩过一次。4. 把筛选结果推进微信群Webhook 接入与三个必调参数4.1 拿到企业微信群机器人的 Webhook 地址一分钟就能配好打开企业微信客户端进入目标群聊点击右上角“...”进入群设置找到“群机器人”选择“添加机器人”给它起个名字比如“数据日报”添加成功后页面会显示一个 Webhook 地址。这个地址长这样https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyxxxx-xxxx-xxxx-xxxx后面所有消息都通过向这个地址发 POST 请求完成。需要澄清一点这个 Webhook 地址不是个人微信的而是企业微信的。标题里写的“微信版”所指的发送目标如果是普通个人微信群那企业微信机器人进不去如果目标群是企业微信群这条路就是通的。至于个人微信的自动化方案后面第 4.3 节会讲它的边界。4.2 UiBot 里发送 Webhook 请求一个 HTTP POST 的事UiBot 有“HTTP/发送请求”指令选择 POST 方法URL 填 Webhook 地址请求体选 JSON 格式然后填下面的内容。// UiBot HTTP 发送指令的请求体直接复制到请求 Body 里 { msgtype: markdown, markdown: { content: 销售日报已生成\n 筛选条件金额10000\n 具体明细请查看下方表格\nfont color\info\本消息由 UiBot 自动发送/font } }参数说明里msgtype 是消息类型markdown 表示用富文本格式content 就是第 3.3 节拼出来的 markdownText 放入的位置。实际在 UiBot 流程里不会手写这段 content而是把 JS 代码里生成的 markdownText 变量直接绑定到 HTTP 请求的 Body 中。UiBot 的指令面板里有一个“请求体内容”输入框可以直接引用变量名。这里有一个必调参数容易被忽视“HTTP/发送请求”指令里的“编码”设置。要选择 UTF-8否则中文内容发出去会变成乱码企业微信机器人收到的 JSON 里全是问号。4.3 如果必须发到个人微信两条现实路径与它们的边界有些团队没有企业微信目标群就是普通个人微信群。这时两条路径可选。一条是用 UiBot 操作 Windows 版微信客户端的界面另一条是用微信电脑版的自动化接口。先说结论两者都不稳定都不适合生产环境。用 UiBot 操作个人微信本质是“模拟人工”UiBot 打开微信窗口、找到搜索框、输入群里某个人的名字、点开聊天窗口、粘贴文本、回车发送。这套流程在微信 3.8.x 版本上还能跑但微信更新到 3.9.x 后窗口结构变了UiBot 的“窗口元素”识别经常失效。另外个人微信最近对网页版登录做了限制走网页协议的路也越走越窄微信电脑版偶尔还会报 dll 错误原因大多是系统缺少运行库或微信版本过旧。如果只是自己给自己推送数据可以用“微信传输助手”的思路——UiBot 控制微信给自己的“文件传输助手”发消息。但这里要控制频率频繁发送容易触发风控。我的建议是个人微信通道只做个人实验和临时测试要稳定推送到群里优先用企业微信机器人或者让目标团队把群升级成企业微信外部群成本最低。5. 踩坑与排查表格错筛、消息乱码、微信收不到的四个真实原因5.1 筛选结果总是包含“已取消”状态的订单现象明明在表格里有一列叫“状态”值有“已确认”“已取消”但推送消息里两种都出现了。原因这段筛选代码只对金额列做了判断完全没有条件去管订单状态。需求方嘴里说“金额大于一万”实际意思是“金额大于一万且状态为已确认”这是需求描述和数据现实之间的经典缝隙。解决在 JS 筛选函数里加一个状态条件。比如在 filterRows 里增加一个 statusIndex 和 expectedStatus 参数把 row[statusIndex] ! expectedStatus 的行去掉同时把状态条件写进 config.json下次需求变了直接改配置。5.2 前导零的订单号变成了数字019876 显示成 19876现象Excel 里订单号是“019876”推送群里显示“19876”客户拿着这个单号找不到订单。原因Excel 单元格格式里如果这列是“常规”格式输入 019876 会自动去掉前导零变成数字 19876 并进行科学计数法。UiBot 读取时读到的自然就是这个数字。解决在 Excel 源文件里把订单号列设为“文本”格式同时在 JS 代码里对订单号列做处理统一转成字符串再补零比如使用 String(row[0]) 后用 padStart(6, 0) 补足位数。两个地方都改掉才能保证前端显示的稳定性。5.3 中文内容推送到微信变成一串问号现象Webhook 返回“发送成功”但群里显示“???”。原因HTTP 请求发送时编码不对。UiBot 的 HTTP 发送指令默认编码可能是 ASCII 或 GBK而企业微信机器人接口要求 UTF-8。解决在 UiBot 的“HTTP/发送请求”指令面板里把“编码”显式改成 UTF-8同时在请求头里加一行 “Content-Type: application/json; charsetutf-8”。改完后建议用一个只含中文和标点的短消息先测试比如“测试中文消息”确认显示正常再跑全量流程。5.4 定时任务今天跑得好好的明天电脑一锁屏就不跑了现象流程在下午三点手动运行正常但设置成每天上午九点自动触发后第二天到公司发现消息没发出去。原因UiBot 的定时任务依赖运行环境。电脑锁屏、屏幕休眠、UiBot 的“运行”窗口被最小化到系统托盘后流程可能没有按计划触发还有一种情况是 UiBot 运行时依赖的 Excel 进程残留导致打开文件时报“工作簿正在使用”。解决电脑设置里把“睡眠”改成“从不”UiBot 编辑器里把定时任务绑定到“机器人助手”的守护进程而不是绑定到某个打开的编辑器窗口。另外在流程末尾加一步“释放 Excel 进程”的操作用 UiBot 指令“Excel/关闭工作簿”明确释放 COM 对象避免残留。6. 把这套流程做成“换表不换流程”配置外置与自检清单6.1 用一份 config.json 管住所有可变项让运营自己改参数流程跑一个月后你的表格路径可能从“销售明细.xlsx”换成“2025年销售明细.xlsx”筛选阈值从一万调到两万群机器人也可能换一个。如果不做配置外置每改一次都要打开 UiBot 编辑器改代码再发布这中间还可能引入新问题。把变量归拢到 config.json 里excelPath 管文件路径sheetName 管工作表名filterColumnIndex 管筛选列threshold 管阈值webhookUrl 管机器人地址groupName 管展示在消息里的分组名。UiBot 流程的第一段固定逻辑是读取 config.json - 解析成变量 - 后续所有指令引用这些变量。改动时记事本编辑保存再跑一次流程就行。这套做法能让你把一个项目的维护成本压缩到原来的三成以下。6.2 可视化日志盘一下昨天跑了没、卡在哪、耗了多久没有界面的定时任务调试时最怕的就是“不知道发生了什么”。在流程里加一个“日志写入”步骤开始运行时把当前时间写成“开始执行”Excel 读取完写“读取完成共 N 行”筛选完写“筛选结果 M 条”发送成功后写“推送成功”发送失败写“HTTP 状态码”。日志文件用文本格式就行路径固定为 D:/logs/rpa_report.log按天追加。第二天发现消息没推送先看日志最后一行是“读取完成”还是“筛选错误”基本就能锁定问题环节。这个习惯帮我省了至少三次半夜排查的经历。跑一版历史数据做验证这是最值得养成的习惯。6.3 用一条脏数据做自检测试通过再发正式消息正式环境里的表格数据质量永远比教程里的样例差有空行、有汇总行、有文本类型的数字、有超长备注。我的习惯是准备一份测试 Excel里面放三条有效数据、一条空行、一条金额为负数的数据、一条金额列是汉字的数据让流程跑一遍。有效数据这条在群里应该正常显示空行这条应该被 isNaN 跳过金额为负数的这条如果需求只要正数那 config 里加一个 minThreshold 过滤掉金额列是汉字这条会被 parseFloat 解析成 NaN也会被跳过日志里会显示“跳过 1 行非法数据”。跑完测试再指向正式表基本不会有惊喜。我现在的所有定时报表都按这个模板搭换表、换阈值、换群都只改配置。刚入职时有一次把筛选阈值写反了把几千条小金额订单全推到了大群从此以后我坚持每次上线前跑一遍脏数据自检。希望帮到你。本文还有配套的精品资源点击获取