1. 读取Excel数据:使用易语言的“Excel支持库”来打开Excel文件,并读取指定单元格的数据。
  2. 操作网页表单:使用易语言的“网页浏览器支持库”来打开目标网页,找到网页上的输入框、下拉框等表单元素。
  3. 数据填入与提交:将Excel中读取到的数据,依次填入到网页表单对应的元素中,最后模拟点击提交按钮。

下面我将为你提供一个详细的图文并茂的教程,包括准备工作、代码示例和关键步骤的讲解。

易语言excel读取填网页表
(图片来源网络,侵删)

第一步:准备工作

在开始编写代码之前,请确保你已经准备好以下内容:

  1. 易语言环境:安装并运行易语言。

  2. 目标Excel文件:创建一个Excel文件(data.xlsx),并设计好表头和数据。

    • 假设你的Excel文件有两张工作表:数据源配置
    • 数据源 工作表:存放你要批量填写的数据。 | 序号 | 姓名 | 身份证号 | 手机号 | 地址 | | :--- | :--- | :--- | :--- | :--- | | 1 | 张三 | 110101... | 13800138000 | 北京市朝阳区... | | 2 | 李四 | 220102... | 13900139000 | 上海市浦东新区... | | 3 | 王五 | 330103... | 13700137000 | 广州市天河区... |
    • 配置 工作表:存放网页表单元素的定位信息,这是实现“自动化”的关键,避免每次都要手动去写元素ID。 | 字段名 | 元素类型 | 元素定位方式 | 定位值 | | :--- | :--- | :--- | :--- | | 姓名 | 输入框 | ID | username | | 身份证号 | 输入框 | ID | idcard | | 手机号 | 输入框 | ID | phone | | 地址 | 输入框 | ID | address | | 提交按钮 | 按钮 | ID | submitBtn |
  3. 目标网页:打开你要填写的网页,并使用浏览器的“开发者工具”(按F12)来查看表单元素的“ID”、“Name”或“Class”等属性,这些就是你的“定位值”。

    易语言excel读取填网页表
    (图片来源网络,侵删)

第二步:创建易语言程序并添加支持库

  1. 打开易语言,新建一个“Windows窗口程序”。
  2. 在“程序”窗口中,点击“支持库” -> “添加...”。
  3. 添加以下两个核心支持库:
    • excel (或 excel2007,取决于你的Excel版本)
    • 网页浏览器

第三步:设计程序界面

为了方便操作,我们可以在窗口上放置一些控件:

  • 一个“按钮”,用于启动自动化流程,将其“标题”改为“开始填写”。
  • 一个“编辑框”,用于显示程序运行时的日志信息,将其“是否多行”属性设为“真”,并调整大小。

第四步:编写核心代码

双击“开始填写”按钮,进入其“_被单击”事件,在这里编写所有核心逻辑。

声明变量

在代码开始处,我们先声明所有需要用到的变量。

.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮_开始填写_被单击
.局部变量 excel_app, 对象
.局部变量 excel_workbook, 对象
.局部变量 excel_worksheet, 对象
.局部变量 excel_config_sheet, 对象
.局部变量 浏览器句柄, 整数型
.局部变量 行号, 整数型
.局部变量 列号, 整数型
.局部变量 配置行号, 整数型
.局部变量 字段名, 文本型
.局部变量 元素类型, 文本型
.局部变量 定位方式, 文本型
.局部变量 定位值, 文本型
.局部变量 当前数据, 文本型
.局部变量 浏览器元素, 对象

读取Excel配置

我们从配置工作表中读取所有字段的定位规则,并存入一个“动态数组”或“字典”中,方便后续循环使用,这里我们使用动态数组。

易语言excel读取填网页表
(图片来源网络,侵删)
' --- 步骤1: 初始化Excel并读取配置信息 ---
.(真)
    excel.创建 ()
    excel_app.赋值 (excel.取Excel应用程序 ())
    .(excel_app.出错)
        编辑框_日志.加入文本 ("无法创建Excel对象!")
        返回 ()
    .否则
        excel_workbook.赋值 (excel_app.打开工作簿 ("C:\path\to\your\data.xlsx")) ' 请修改为你的Excel文件路径
        .(excel_workbook.出错)
            编辑框_日志.加入文本 ("无法打开Excel文件!请检查路径。")
            excel_app.退出 ()
            返回 ()
        .否则
            ' 读取配置工作表
            excel_config_sheet.赋值 (excel_workbook.取工作表 ("配置"))
            .计次循环首 (excel_config_sheet.取最大行数 (), 配置行号)
                ' 跳过表头
                .(配置行号 > 1)
                    字段名.赋值 (excel_config_sheet.取单元格值 (配置行号, 1))
                    元素类型.赋值 (excel_config_sheet.取单元格值 (配置行号, 2))
                    定位方式.赋值 (excel_config_sheet.取单元格值 (配置行号, 3))
                    定位值.赋值 (excel_config_sheet.取单元格值 (配置行号, 4))
                    ' 将配置信息存入动态数组 (这里简化处理,实际可以用更复杂的数据结构)
                    ' 我们用一个全局变量或类来存储这些配置
                    ' 为简化示例,我们假设这些变量在循环外可用
                .否则
                .如果结束
            .计次循环尾 ()
        .如果结束
    .如果结束
.否则
    excel_app.退出 ()
.如果结束

循环读取数据并填写网页

这是整个流程的核心,我们将打开一个网页,然后循环读取Excel数据源中的每一行,并填入网页。

' --- 步骤2: 打开网页并循环填写数据 ---
.(真)
    ' 创建并打开浏览器
    浏览器句柄.赋值 (创建_网页浏览器 (窗口_启动窗口, 0, 0, 0, 0, , , , , ))
    .(浏览器句柄 = 0)
        编辑框_日志.加入文本 ("创建浏览器失败!")
        返回 ()
    .否则
        浏览器_导航 (浏览器句柄, "http://www.example.com/form") ' 请修改为你的目标网页地址
        ' 等待网页加载完成
        延时 (5000) ' 简单延时,更可靠的方法是判断网页加载状态
        ' 计次循环,读取数据源工作表的每一行
        excel_worksheet.赋值 (excel_workbook.取工作表 ("数据源"))
        .计次循环首 (excel_worksheet.取最大行数 (), 行号)
            ' 跳过表头
            .(行号 > 1)
                编辑框_日志.加入文本 ("--- 开始处理第 " + 到文本(行号) + " 行数据 ---")
                ' 根据配置,找到对应的输入框并填入数据
                ' 这里我们简化了配置读取,实际代码中应从之前读取的配置数组中获取
                ' 假设我们已经知道 "姓名" 对应 ID "username"
                ' 填写姓名
                当前数据.赋值 (excel_worksheet.取单元格值 (行号, 2)) ' 姓名在第2列
                浏览器元素.赋值 (网页浏览器_取元素 (浏览器句柄, "ID", "username"))
                .(浏览器元素.取到元素 () = 真)
                    浏览器元素.置内容 (当前数据)
                    编辑框_日志.加入文本 ("已填写姓名: " + 当前数据)
                .否则
                    编辑框_日志.加入文本 ("未找到ID为 'username' 的元素!")
                .如果结束
                ' 填写身份证号
                当前数据.赋值 (excel_worksheet.取单元格值 (行号, 3)) ' 身份证号在第3列
                浏览器元素.赋值 (网页浏览器_取元素 (浏览器句柄, "ID", "idcard"))
                .(浏览器元素.取到元素 () = 真)
                    浏览器元素.置内容 (当前数据)
                    编辑框_日志.加入文本 ("已填写身份证号: " + 当前数据)
                .如果结束
                ' 填写手机号
                当前数据.赋值 (excel_worksheet.取单元格值 (行号, 4)) ' 手机号在第4列
                浏览器元素.赋值 (网页浏览器_取元素 (浏览器句柄, "ID", "phone"))
                .(浏览器元素.取到元素 () = 真)
                    浏览器元素.置内容 (当前数据)
                    编辑框_日志.加入文本 ("已填写手机号: " + 当前数据)
                .如果结束
                ' 填写地址
                当前数据.赋值 (excel_worksheet.取单元格值 (行号, 5)) ' 地址在第5列
                浏览器元素.赋值 (网页浏览器_取元素 (浏览器句柄, "ID", "address"))
                .(浏览器元素.取到元素 () = 真)
                    浏览器元素.置内容 (当前数据)
                    编辑框_日志.加入文本 ("已填写地址: " + 当前数据)
                .如果结束
                ' 点击提交按钮
                浏览器元素.赋值 (网页浏览器_取元素 (浏览器句柄, "ID", "submitBtn"))
                .(浏览器元素.取到元素 () = 真)
                    浏览器元素.单击 ()
                    编辑框_日志.加入文本 ("已点击提交按钮")
                    ' 等待提交后的页面反应,例如跳转或提示
                    延时 (3000) ' 根据实际情况调整延时
                .如果结束
                编辑框_日志.加入文本 ("--- 第 " + 到文本(行号) + " 行数据处理完成 ---")
                延时 (2000) ' 每次填写后稍作停顿,避免请求过快
            .否则
            .如果结束
        .计次循环尾 ()
        ' 所有数据处理完毕
        编辑框_日志.加入文本 ("所有数据填写完毕!")
    .如果结束
.否则
    ' 错误处理...
.如果结束

清理资源

程序运行结束后,一定要关闭Excel和浏览器,释放资源。

' --- 步骤3: 清理资源 ---
excel_workbook.关闭 (, 假) ' 关闭工作簿,不保存更改
excel_app.退出 () ' 退出Excel应用程序
编辑框_日志.加入文本 ("Excel已关闭。")
' 销毁浏览器对象
销毁_网页浏览器 (浏览器句柄)
编辑框_日志.加入文本 ("浏览器已关闭。")

第四步:完整代码与优化建议

将以上代码块整合到_按钮_开始填写_被单击子程序中,并记得修改Excel文件路径和网页地址。

完整代码示例 (整合版)

.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮_开始填写_被单击
.局部变量 excel_app, 对象
.局部变量 excel_workbook, 对象
.局部变量 excel_worksheet, 对象
.局部变量 excel_config_sheet, 对象
.局部变量 浏览器句柄, 整数型
.局部变量 行号, 整数型
.局部变量 配置行号, 整数型
.局部变量 字段名, 文本型
.局部变量 元素类型, 文本型
.局部变量 定位方式, 文本型
.局部变量 定位值, 文本型
.局部变量 当前数据, 文本型
.局部变量 浏览器元素, 对象
.局部变量 配置数组, 文本型, , "0,4" ' 假设最多100个配置项,每项4个属性
.(真)
    ' --- 1. 初始化Excel并读取配置 ---
    编辑框_日志.加入文本 ("正在初始化Excel...")
    excel.创建 ()
    excel_app.赋值 (excel.取Excel应用程序 ())
    .(excel_app.出错)
        编辑框_日志.加入文本 ("[错误] 无法创建Excel对象!")
        返回 ()
    .否则
        ' 请务必修改下面的路径!
        excel_workbook.赋值 (excel_app.打开工作簿 ("C:\Users\YourUser\Desktop\data.xlsx"))
        .(excel_workbook.出错)
            编辑框_日志.加入文本 ("[错误] 无法打开Excel文件!请检查路径。")
            excel_app.退出 ()
            返回 ()
        .否则
            excel_config_sheet.赋值 (excel_workbook.取工作表 ("配置"))
            .计次循环首 (excel_config_sheet.取最大行数 (), 配置行号)
                .(配置行号 > 1)
                    字段名.赋值 (excel_config_sheet.取单元格值 (配置行号, 1))
                    元素类型.赋值 (excel_config_sheet.取单元格值 (配置行号, 2))
                    定位方式.赋值 (excel_config_sheet.取单元格值 (配置行号, 3))
                    定位值.赋值 (excel_config_sheet.取单元格值 (配置行号, 4))
                    ' 存入动态数组
                    配置数组[配置行号 - 2, 0] = 字段名
                    配置数组[配置行号 - 2, 1] = 元素类型
                    配置数组[配置行号 - 2, 2] = 定位方式
                    配置数组[配置行号 - 2, 3] = 定位值
                .如果结束
            .计次循环尾 ()
            编辑框_日志.加入文本 ("配置信息读取完成。")
        .如果结束
    .如果结束
.否则
    excel_app.退出 ()
.如果结束
' --- 2. 打开网页并循环填写数据 ---
.(真)
    编辑框_日志.加入文本 ("正在打开网页...")
    ' 请务必修改下面的网址!
    浏览器句柄.赋值 (创建_网页浏览器 (窗口_启动窗口, 0, 0, 0, 0, , , , , ))
    .(浏览器句柄 = 0)
        编辑框_日志.加入文本 ("[错误] 创建浏览器失败!")
        返回 ()
    .否则
        浏览器_导航 (浏览器句柄, "http://www.example.com/form")
        延时 (5000) ' 等待加载
        excel_worksheet.赋值 (excel_workbook.取工作表 ("数据源"))
        .计次循环首 (excel_worksheet.取最大行数 (), 行号)
            .(行号 > 1)
                编辑框_日志.加入文本 ("--- 处理第 " + 到文本(行号) + " 行 ---")
                ' 使用循环和配置数组来填写,代码更简洁
                .计次循环首 (取数组成员数 (配置数组, 1), 列号)
                    字段名.赋值 (配置数组[列号 - 1, 0])
                    定位方式.赋值 (配置数组[列号 - 1, 2])
                    定位值.赋值 (配置数组[列号 - 1, 3])
                    ' 根据字段名从Excel数据行中获取数据
                    .判断开始 (字段名)
                        .("姓名" = 字段名)
                            当前数据.赋值 (excel_worksheet.取单元格值 (行号, 2))
                        .("身份证号" = 字段名)
                            当前数据.赋值 (excel_worksheet.取单元格值 (行号, 3))
                        .("手机号" = 字段名)
                            当前数据.赋值 (excel_worksheet.取单元格值 (行号, 4))
                        .("地址" = 字段名)
                            当前数据.赋值 (excel_worksheet.取单元格值 (行号, 5))
                        ' ... 可以添加更多字段
                    .判断结束
                    ' 填入数据
                    浏览器元素.赋值 (网页浏览器_取元素 (浏览器句柄, 定位方式, 定位值))
                    .(浏览器元素.取到元素 () = 真)
                        浏览器元素.置内容 (当前数据)
                        编辑框_日志.加入文本 ("  [成功] 已填写 " + 字段名 + ": " + 取文本左边 (当前数据, 10) + "...")
                    .否则
                        编辑框_日志.加入文本 ("  [失败] 未找到元素: " + 定位方式 + "=" + 定位值)
                    .如果结束
                .计次循环尾 ()
                ' 提交
                编辑框_日志.加入文本 ("  正在提交...")
                浏览器元素.赋值 (网页浏览器_取元素 (浏览器句柄, "ID", "submitBtn"))
                .(浏览器元素.取到元素 () = 真)
                    浏览器元素.单击 ()
                    延时 (3000) ' 等待提交结果
                .如果结束
                延时 (2000)
            .如果结束
        .计次循环尾 ()
        编辑框_日志.加入文本 ("所有数据填写完毕!")
    .如果结束
.如果结束
' --- 3. 清理资源 ---
.(excel_workbook.取到对象 ())
    excel_workbook.关闭 (, 假)
.如果结束
.(excel_app.取到对象 ())
    excel_app.退出 ()
.如果结束
.(浏览器句柄 ≠ 0)
    销毁_网页浏览器 (浏览器句柄)
.如果结束
编辑框_日志.加入文本 ("程序运行结束,资源已释放。")

总结与关键点

  • 配置驱动:通过Excel的配置工作表来管理网页元素的定位,是提高程序可维护性的关键,当网页结构发生变化时,你只需要修改Excel配置,而无需改动易语言代码。
  • 元素定位网页浏览器_取元素 是核心函数,你需要熟练掌握它的定位方式,如 ID(最常用)、NameClassTag 等,如果元素没有这些属性,还可以使用 CSS选择器XPath,功能更强大。
  • 等待与延时:网页加载和页面响应需要时间,使用 延时 是最简单的方法,但对于复杂的网页,可能需要更智能的等待方式,例如循环判断某个元素是否出现。
  • 错误处理:代码中的 .(元素.取到元素 () = 真) 判断非常重要,可以有效防止因找不到元素而导致的程序崩溃。
  • 资源释放:最后一定要关闭Excel和销毁浏览器对象,否则会导致进程残留,占用系统资源。

这个教程为你提供了一个完整的框架,你可以根据自己实际要操作的网页和Excel表格进行调整和扩展,祝你编程顺利!