1. 读取 Excel 文件:获取需要填写的所有数据。
  2. 操作网页:打开网页,定位到网页中的表单输入框、按钮等元素。
  3. 数据填充与提交:将 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内容到网页填表
(图片来源网络,侵删)
  1. excel对象.创建 (“Excel.Application”, , 真):创建一个 Excel 应用程序的实例。
  2. excel对象.属性_可见 = 假:让 Excel 在后台运行,用户看不到界面。
  3. 工作簿. (...):打开指定的 Excel 文件。
  4. 工作表.工作表 (1):获取第一个工作表。
  5. 数据范围.范围 (“A1:D10”):定义一个数据区域,你可以使用 UsedRange 属性来获取已使用的所有单元格,工作表.UsedRange
  6. 数据范围.单元格 (i, j).值:通过行和列索引来获取单元格的值。
  7. 不要立即关闭 Excel,因为我们还需要使用这些数据,在实际应用中,你应该将读取到的数据存储在全局变量或数组里。

第二步:操作网页并填表

我们将使用 网页浏览器支持库 来创建一个浏览器窗口,并自动化地操作网页。

代码示例 (网页填表)

假设我们要填写的网页表单有两个输入框,一个 idusername,一个 idpassword,还有一个提交按钮 idsubmitBtn

.版本 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();”)
输出 (“表单填写并提交完成!”)

代码解释

  1. 网页浏览器.创建 (...):创建一个嵌入到窗口的浏览器控件。
  2. 网页浏览器.地址 = “...”:让浏览器导航到指定的网址。
  3. 延时 (3000)关键步骤,网页加载和渲染元素需要时间,必须等待足够长的时间,否则代码执行时元素可能还未出现,导致找不到元素而失败。
  4. 网页浏览器.执行 (“...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对象.退出 ()
    ' 可以选择是否关闭浏览器窗口
    ' 网页浏览器.销毁 ()

关键难点与注意事项

  1. 元素定位:这是最关键也最容易出错的地方,你必须准确地找到网页上输入框、按钮的“身份证号”。
    • 最佳选择IDid 在页面中是唯一的,最稳定。
    • 次优选择Namename 可能不唯一,但通常用于表单提交。
    • 通用选择CSS 选择器XPath,功能最强大,可以处理各种复杂情况,你可以使用浏览器自带的“开发者工具”(按 F12)来轻松获取这些选择器。
  2. 等待时间:网页加载、元素渲染、服务器响应都需要时间。延时() 是最简单的方法,但不够智能,更好的方法是轮询检查,就像完整示例中等待欢迎信息出现一样,代码会循环检查某个元素是否存在,直到超时或找到为止。
  3. 反爬虫机制:很多网站会检测自动化操作,如果你的操作速度过快、行为模式过于规律,可能会被识别为机器人并阻止,可以考虑:
    • 在操作之间加入随机的延时。
    • 模拟人类的鼠标移动和点击(这更复杂,需要用到 ole自动化 操作 IE 或使用 Selenium 等工具)。
  4. 动态加载内容:很多现代网站(特别是单页应用 SPA)的内容是通过 JavaScript 动态加载的,这意味着你可能在页面初始加载时找不到元素,你需要等待 JavaScript 执行完毕,内容加载出来后再进行操作,开发者工具中的 "Network" 标签可以帮助你判断内容何时加载完成。
  5. 处理弹窗和跳转:提交表单后可能会弹出警告框(alert)或页面会跳转,你需要提前处理这些情况,否则程序可能会卡住,可以使用 网页浏览器.执行 ("window.alert = function(){};"); 来禁用 alert 弹窗。

通过以上步骤和示例,你应该能够在易语言中实现从 Excel 读取数据并自动填充到网页表单的功能,祝你编程顺利!