- 读取 Excel 文件:获取需要填写的所有数据。
- 操作网页:打开网页,定位到网页中的表单输入框、按钮等元素。
- 数据填充与提交:将 Excel 中的数据逐行或逐个填入网页的对应元素,并执行提交操作。
下面我将为你提供一个详细的、分步的教程,包括代码示例和关键点的解释。

(图片来源网络,侵删)
准备工作:易语言支持库
在开始之前,请确保你的易语言程序已经加载了必要的支持库,对于网页操作,最常用的是 网页浏览器支持库 和 ole自动化支持库。
- 网页浏览器支持库 (.e):用于创建和控制一个嵌入到易语言窗口中的浏览器控件,方便调试和操作。
- ole自动化支持库 (.e):用于操作 Excel 这样的外部 COM 组件。
你可以在易语言的“支持库”菜单中勾选这两个库。
第一步:读取 Excel 文件
我们将使用 ole自动化支持库 来操作 Excel,这个方法的好处是无需额外安装 Excel 程序,只要有 Excel 的核心组件(Windows 系统自带)即可。
代码示例 (读取 Excel)
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 excel对象, ole自动化对象
.局部变量 工作簿, ole自动化对象
.局部变量 工作表, ole自动化对象
.局部变量 数据范围, ole自动化对象
.局部变量 行数, 整数型
.局部变量 列数, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
' --- 1. 创建 Excel 应用程序对象 ---
excel对象.创建 (“Excel.Application”, , 真)
' 设置 Excel 不可见,在后台运行
excel对象.属性_可见 = 假
' --- 2. 打开指定的 Excel 文件 ---
' 请将 "C:\你的Excel文件.xlsx" 替换为你的实际文件路径
工作簿 = excel对象.工作簿.打开 (“C:\你的Excel文件.xlsx”)
' --- 3. 获取第一个工作表 ---
工作表 = 工作簿.工作表 (1)
' --- 4. 获取数据范围 ---
' 假设数据从 A1 开始,到 D10 结束,你可以根据实际情况调整
数据范围 = 工作表.范围 (“A1:D10”)
' --- 5. 获取数据的行数和列数 ---
行数 = 数据范围.行数
列数 = 数据范围.列数
' --- 6. 遍历并打印数据到调试输出 (仅用于演示) ---
输出 (“开始读取 Excel 数据...”)
输出 (“总行数: ” + 到文本 (行数))
输出 (“总列数: ” + 到文本 (列数))
输出 (“----------------------------------------”)
.计次循环首 (行数, i)
.计次循环首 (列数, j)
' 获取单元格的值 (注意:行列索引从1开始)
输出 (“第” + 到文本 (i) + “行, 第” + 到文本 (j) + “列: ” + 数据范围.单元格 (i, j).值)
.计次循环尾 ()
.计次循环尾 ()
' --- 7. 关闭 Excel 文件,不保存更改 ---
' 注意:这里先不关闭,因为我们下一步需要使用这些数据
' 工作簿.关闭 (假)
' excel对象.退出 ()
' 将读取到的数据存储到全局变量或数组中,以便后续使用
' 可以创建一个二维数组来存储所有数据
' 全局数据数组 = 创建二维数组(行数, 列数)
' ... 循环赋值 ...
输出 (“Excel 数据读取完成!”)
代码解释:

(图片来源网络,侵删)
excel对象.创建 (“Excel.Application”, , 真):创建一个 Excel 应用程序的实例。excel对象.属性_可见 = 假:让 Excel 在后台运行,用户看不到界面。工作簿. (...):打开指定的 Excel 文件。工作表.工作表 (1):获取第一个工作表。数据范围.范围 (“A1:D10”):定义一个数据区域,你可以使用UsedRange属性来获取已使用的所有单元格,工作表.UsedRange。数据范围.单元格 (i, j).值:通过行和列索引来获取单元格的值。- 不要立即关闭 Excel,因为我们还需要使用这些数据,在实际应用中,你应该将读取到的数据存储在全局变量或数组里。
第二步:操作网页并填表
我们将使用 网页浏览器支持库 来创建一个浏览器窗口,并自动化地操作网页。
代码示例 (网页填表)
假设我们要填写的网页表单有两个输入框,一个 id 为 username,一个 id 为 password,还有一个提交按钮 id 为 submitBtn。
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 网页浏览器, 网页浏览器
.局部变量 用户名, 文本型
.局部变量 密码, 文本型
' --- 创建网页浏览器控件 ---
网页浏览器.创建 (, , , , , 真, , )
' --- 导航到目标网页 ---
' 请将 "http://example.com/login" 替换为你的目标网址
网页浏览器.地址 = “http://example.com/login”
' --- 等待网页加载完成 ---
' 这是一个简单的等待,更健壮的方法是监听网页加载完成事件
延时 (3000) ' 等待3秒,确保页面元素已渲染
' --- 从我们第一步读取的 Excel 数据中获取第一行的用户名和密码 ---
' 假设用户名在第一列,密码在第二列
' 用户名 = 全局数据数组 [1, 1]
' 密码 = 全局数据数组 [1, 2]
' 这里为了演示,我们直接使用假数据
用户名 = “testuser”
密码 = “testpassword”
' --- 定位并填写用户名输入框 ---
' 方法1:通过ID (最推荐,最稳定)
网页浏览器.执行 (“document.getElementById('username').value = '" + 用户名 + “';”)
' 方法2:通过Name (如果元素有name属性)
' 网页浏览器.执行 (“document.getElementsByName('user')[0].value = '" + 用户名 + “';”)
' 方法3:通过CSS选择器 (非常灵活)
' 网页浏览器.执行 (“document.querySelector('#username').value = '" + 用户名 + “';”)
' --- 定位并填写密码输入框 ---
网页浏览器.执行 (“document.getElementById('password').value = '" + 密码 + “';”)
' --- 点击提交按钮 ---
' 方法1:通过ID
网页浏览器.执行 (“document.getElementById('submitBtn').click();”)
' 方法2:通过XPath (如果元素没有id或name)
' 网页浏览器.执行 (“document.evaluate('//input[@type=\"submit\"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();”)
输出 (“表单填写并提交完成!”)
代码解释:
网页浏览器.创建 (...):创建一个嵌入到窗口的浏览器控件。网页浏览器.地址 = “...”:让浏览器导航到指定的网址。延时 (3000):关键步骤,网页加载和渲染元素需要时间,必须等待足够长的时间,否则代码执行时元素可能还未出现,导致找不到元素而失败。网页浏览器.执行 (“...JavaScript代码...”):这是核心方法,它可以在当前网页的上下文中执行 JavaScript 代码。document.getElementById('username'):这是标准的 JavaScript DOM 操作,通过元素的id属性来精确查找元素。.value = '...':设置找到的输入框的值。.click():模拟鼠标点击事件。
第三步:整合与完整示例
我们将读取 Excel 和网页填表两个部分整合起来,我们将实现一个功能:读取 Excel 的每一行,然后循环填写到网页表单中。
假设你的 Excel (data.xlsx) 内容如下:
| A | B | |
|---|---|---|
| 1 | 用户名1 | 密码1 |
| 2 | 用户名2 | 密码2 |
| 3 | 用户名3 | 密码3 |
完整易语言代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.程序集变量 excel对象, ole自动化对象
.程序集变量 工作簿, ole自动化对象
.程序集变量 工作表, ole自动化对象
.程序集变量 数据范围, ole自动化对象
.程序集变量 行数, 整数型
.程序集变量 当前行, 整数型
.程序集变量 网页浏览器, 网页浏览器
.子程序 __启动窗口_创建完毕
' --- 1. 初始化 Excel ---
excel对象.创建 (“Excel.Application”, , 真)
excel对象.属性_可见 = 假
工作簿 = excel对象.工作簿.打开 (“C:\data.xlsx”)
工作表 = 工作簿.工作表 (1)
数据范围 = 工作表.UsedRange ' 获取所有已使用区域
行数 = 数据范围.行数
' --- 2. 初始化网页浏览器 ---
网页浏览器.创建 (, , , , , 真, , )
网页浏览器.地址 = “http://example.com/login”
输出 (“正在加载网页,请稍候...”)
' --- 3. 延时并开始循环填表 ---
' 等待5秒,确保网页完全加载
延时 (5000)
.计次循环首 (行数 - 1, 当前行) ' 减去1,通常第一行是标题
' 获取当前行的用户名和密码
.如果真 (当前行 > 0) ' 跳过第一行标题
.局部变量 用户名, 文本型
.局部变量 密码, 文本型
用户名 = 数据范围.单元格 (当前行 + 1, 1).值 ' Excel行列从1开始,循环变量从0开始
密码 = 数据范围.单元格 (当前行 + 1, 2).值
输出 (“正在处理第” + 到文本 (当前行 + 1) + “行数据: 用户名=” + 用户名)
' 清空之前的输入框内容 (防止上次提交后未清空)
网页浏览器.执行 (“document.getElementById('username').value = '';”)
网页浏览器.执行 (“document.getElementById('password').value = '';”)
' 填写新数据
网页浏览器.执行 (“document.getElementById('username').value = '" + 用户名 + “';”)
网页浏览器.执行 (“document.getElementById('password').value = '" + 密码 + “';”)
' 点击提交
网页浏览器.执行 (“document.getElementById('submitBtn').click();”)
' --- 4. 等待提交结果并处理 ---
' 这里需要根据实际情况等待
' 等待页面跳转或出现成功提示
' 延时 (3000) ' 简单等待3秒
' 更高级的等待:可以循环检查某个元素是否存在
.局部变量 等待次数, 整数型
等待次数 = 0
.循环判断首 (等待次数 < 10)
.如果真 (网页浏览器.执行 (“return document.getElementById('welcome-message') != null;”) = 真)
输出 (“提交成功,页面已跳转!”)
跳出循环 ()
.否则
延时 (500)
等待次数 += 1
.如果真结束
.循环判断尾 ()
' 如果需要继续填写下一行,可能需要返回到登录页面
' 网页浏览器.地址 = “http://example.com/login”
' 延时 (2000)
.如果真结束
.计次循环尾 ()
' --- 5. 清理资源 ---
输出 (“所有数据处理完毕!”)
' 关闭 Excel,不保存更改
工作簿.关闭 (假)
excel对象.退出 ()
' 可以选择是否关闭浏览器窗口
' 网页浏览器.销毁 ()
关键难点与注意事项
- 元素定位:这是最关键也最容易出错的地方,你必须准确地找到网页上输入框、按钮的“身份证号”。
- 最佳选择:
ID。id在页面中是唯一的,最稳定。 - 次优选择:
Name。name可能不唯一,但通常用于表单提交。 - 通用选择:
CSS 选择器或XPath,功能最强大,可以处理各种复杂情况,你可以使用浏览器自带的“开发者工具”(按 F12)来轻松获取这些选择器。
- 最佳选择:
- 等待时间:网页加载、元素渲染、服务器响应都需要时间。
延时()是最简单的方法,但不够智能,更好的方法是轮询检查,就像完整示例中等待欢迎信息出现一样,代码会循环检查某个元素是否存在,直到超时或找到为止。 - 反爬虫机制:很多网站会检测自动化操作,如果你的操作速度过快、行为模式过于规律,可能会被识别为机器人并阻止,可以考虑:
- 在操作之间加入随机的延时。
- 模拟人类的鼠标移动和点击(这更复杂,需要用到
ole自动化操作IE或使用Selenium等工具)。
- 动态加载内容:很多现代网站(特别是单页应用 SPA)的内容是通过 JavaScript 动态加载的,这意味着你可能在页面初始加载时找不到元素,你需要等待 JavaScript 执行完毕,内容加载出来后再进行操作,开发者工具中的 "Network" 标签可以帮助你判断内容何时加载完成。
- 处理弹窗和跳转:提交表单后可能会弹出警告框(
alert)或页面会跳转,你需要提前处理这些情况,否则程序可能会卡住,可以使用网页浏览器.执行 ("window.alert = function(){};");来禁用alert弹窗。
通过以上步骤和示例,你应该能够在易语言中实现从 Excel 读取数据并自动填充到网页表单的功能,祝你编程顺利!
