易语言开发从入门到精通:补充篇·文件批量操作深度实战·常用格式处理·自动化脚本开发·性能优化 🔧📁⚡
1.32.1 学习目标 🎯
作为《易语言开发从入门到精通》的文件批量操作补充篇·办公自动化与本地数据处理加速器·深度实战与性能优化 ,本章将帮你构建完整的文件批量操作思维框架,完成多个常用的自动化脚本项目,大幅提升工作效率,达成以下4重可落地的明确目标:
- 构建文件批量操作思维框架:掌握"遍历目录→筛选文件→执行操作→结果统计"的四步标准化操作模式;
- 精通常用格式文件的批量处理:学会批量处理文本文件(合并、分割、替换内容)、Excel文件(读取、写入、数据清洗)、图片文件(压缩、格式转换、水印添加)、PDF文件(合并、分割、提取文本)的方法;
- 开发实用的自动化脚本:完成4个常用的自动化脚本项目------批量重命名工具、批量Excel数据处理工具、批量图片压缩工具、批量文本文件替换工具;
- 掌握文件批量操作的性能优化:学习处理大量文件时的性能优化经验,如多线程操作、分块处理、缓存机制、文件路径优化。
1.32.2 文件批量操作的核心思维框架------四步标准化操作模式 🧠
文件批量操作的本质是对大量文件进行重复的、标准化的处理,因此构建一个标准化的思维框架非常重要。四步标准化操作模式可以帮助你快速解决90%以上的文件批量操作问题。
1.32.2.1 四步标准化操作模式的功能划分
✅ 第一步:遍历目录
- 功能:遍历指定目录下的所有文件(包括子目录下的文件);
- 常用方法:使用易语言的"文件_枚举目录""文件_遍历目录"等支持库函数;
- 注意事项:要区分"遍历文件夹"和"遍历文件",要处理符号链接和隐藏文件的情况;
✅ 第二步:筛选文件
- 功能:根据文件的格式、大小、创建时间、修改时间等条件筛选出需要处理的文件;
- 常用方法:使用易语言的"文件_取扩展名""文件_取大小""文件_取创建时间""文件_取修改时间"等支持库函数;
- 注意事项:要处理大小写不敏感的情况(如.txt和.TXT都是文本文件),要处理模糊匹配的情况(如*.doc和*.docx都是Word文件);
✅ 第三步:执行操作
- 功能:对筛选出的文件执行标准化的操作,如重命名、合并、分割、替换内容、格式转换等;
- 常用方法:使用易语言的支持库函数(如eExcel支持库处理Excel文件、精易模块处理图片文件、PDF支持库处理PDF文件);
- 注意事项:要处理文件正在被占用的情况,要处理操作失败的情况,要添加操作进度显示;
✅ 第四步:结果统计
- 功能:统计操作的结果,如成功处理的文件数量、失败处理的文件数量、操作耗时等;
- 常用方法:使用易语言的变量和时钟组件;
- 注意事项:要将统计结果保存到日志文件中,方便后期的查看和分析。
1.32.3 文件批量操作深度实战------4个常用的自动化脚本项目 📱
现在,我们来开发4个常用的自动化脚本项目,这些项目将用到所有四步标准化操作模式的技术,覆盖文本文件、Excel文件、图片文件的批量处理。
1.32.3.1 项目1:批量重命名工具 📝
项目需求分析 :
✅ 功能需求:
- 基础功能:遍历指定目录下的所有文件,根据规则批量重命名文件(如按顺序编号、添加前缀后缀、替换文件名中的特定字符);
- 筛选功能:根据文件的格式、大小、创建时间、修改时间等条件筛选出需要重命名的文件;
- 规则设置功能:支持多种重命名规则,如顺序编号(从1开始,每次增加1)、添加前缀后缀、替换文件名中的特定字符、按文件属性重命名;
- 辅助功能 :操作前预览重命名后的文件名,操作后统计结果并保存到日志文件中;
✅ 非功能需求: - 界面设计:功能分区明确(目录选择区、筛选条件区、规则设置区、预览区、操作区、结果统计区)、简洁美观;
- 数据安全:操作前自动备份原始文件名到日志文件中,操作后支持撤销重命名;
- 响应时间:操作响应时间不超过1秒,处理1000个文件的时间不超过10秒;
界面设计 (组件箱拖拽+属性表配置):
① 新建Windows窗口程序 :打开易语言官方IDE,点击"文件→新建→Windows窗口程序→确定";
② 添加容器组件 :从组件箱中拖拽6个分组框组件到"_启动窗口"上,属性名分别为"_分组框_目录选择区""_分组框_筛选条件区""_分组框_规则设置区""_分组框_预览区""_分组框_操作区""_分组框_结果统计区",标题分别为"目录选择区""筛选条件区""规则设置区""预览区""操作区""结果统计区",位置分别为(10,10)、(10,70)、(10,150)、(10,260)、(10,450)、(520,10),宽度分别为500px、500px、500px、500px、500px、300px,高度分别为50px、70px、100px、180px、40px、480px;
③ 添加目录选择区组件:
- 1个编辑框组件:属性名分别为"_编辑框_目标目录",位置为(20,15),宽度为400px,高度为25px;
- 1个按钮组件 :属性名分别为"_按钮_选择目录",标题为"选择目录",位置为(430,15),宽度为80px,高度为25px;
④ 添加筛选条件区组件: - 2个标签组件:属性名分别为"_标签_文件格式""_标签_文件大小范围",标题分别为"文件格式:""文件大小范围:",位置分别为(20,15)、(20,40);
- 2个编辑框组件:属性名分别为"_编辑框_文件格式""_编辑框_文件大小最小""_编辑框_文件大小最大",位置分别为(80,15)、(80,40)、(200,40),宽度分别为150px、100px、100px,高度统一为25px;
- 1个标签组件 :属性名分别为"_标签_文件大小单位",标题为"KB",位置为(310,40);
⑤ 添加规则设置区组件: - 1个组合框组件:属性名分别为"_组合框_重命名规则",标题为"重命名规则:",位置为(20,15),宽度为150px,高度为25px,列表项为"顺序编号|添加前缀|添加后缀|替换特定字符|按文件属性重命名";
- 3个编辑框组件 :属性名分别为"_编辑框_前缀""_编辑框_后缀""_编辑框_要替换的字符""_编辑框_替换后的字符",位置分别为(20,45)、(150,45)、(280,45)、(410,45),宽度分别为120px、120px、120px、120px,高度统一为25px;
⑥ 添加预览区组件: - 1个列表框组件 :属性名分别为"_列表框_文件名预览",位置为(20,15),宽度为460px,高度为150px;
⑦ 添加操作区组件: - 3个按钮组件 :属性名分别为"_按钮_预览重命名""_按钮_执行重命名""_按钮_撤销重命名",标题分别为"预览重命名""执行重命名""撤销重命名",位置分别为(20,10)、(130,10)、(240,10),宽度分别为100px、100px、100px,高度统一为25px;
⑧ 添加结果统计区组件: - 4个标签组件:属性名分别为"_标签_成功处理文件数量""_标签_失败处理文件数量""_标签_操作耗时""_标签_原始文件名备份路径",标题分别为"成功处理文件数量:""失败处理文件数量:""操作耗时:""原始文件名备份路径:",位置分别为(20,20)、(20,50)、(20,80)、(20,110);
- 4个编辑框组件:属性名分别为"_编辑框_成功处理文件数量""_编辑框_失败处理文件数量""_编辑框_操作耗时""_编辑框_原始文件名备份路径",位置分别为(140,20)、(140,50)、(140,80)、(140,110),宽度分别为140px、140px、140px、140px,高度统一为25px,可用为假;
- 1个时钟组件:属性名分别为"_时钟_操作耗时",时钟周期为1000,可见为假;
- 1个通用对话框组件:属性名分别为"_通用对话框_选择目录",类型为"打开目录",初始目录为程序的运行目录;
代码实现(分模块详细代码+注释):
模块1:启动窗口事件驱动代码
e
.版本 2
.支持库 spec
.支持库 eFile
.支持库 iext
.程序集 窗口程序集_启动窗口
.程序集变量 原始文件名列表, 文本型, , "0" ' 存储原始文件名列表
.程序集变量 重命名后文件名列表, 文本型, , "0" ' 存储重命名后文件名列表
.程序集变量 操作开始时间, 整数型 ' 存储操作开始时间
.子程序 _启动窗口_创建完毕
' 设置原始文件名备份路径
_编辑框_原始文件名备份路径.内容 = 取运行目录 () + "/原始文件名备份.txt"
.子程序 _启动窗口_将被销毁
' 停止操作耗时的时钟
_时钟_操作耗时.时钟周期 = 0
.子程序 _按钮_选择目录_被单击
' 打开选择目录对话框
.如果真 (_通用对话框_选择目录.打开 () = 假)
返回 ()
.如果真结束
' 设置目标目录
_编辑框_目标目录.内容 = _通用对话框_选择目录.文件名
' 清空文件名预览列表
_列表框_文件名预览.清空 ()
' 清空原始文件名列表和重命名后文件名列表
清除数组 (原始文件名列表)
清除数组 (重命名后文件名列表)
.子程序 _按钮_预览重命名_被单击
' 检查目标目录是否为空
.如果真 (_编辑框_目标目录.内容 = "")
信息框 ("请选择目标目录!", #错误图标, "批量重命名工具")
返回 ()
.如果真结束
' 遍历目标目录下的所有文件
.局部变量 文件路径数组, 文本型, , "0"
文件路径数组 = 文件_枚举目录 (_编辑框_目标目录.内容, 真, 真)
' 筛选文件
.局部变量 筛选后的文件路径数组, 文本型, , "0"
筛选后的文件路径数组 = 筛选文件 (文件路径数组)
' 检查筛选后的文件数量是否为0
.如果真 (取数组成员数 (筛选后的文件路径数组) = 0)
信息框 ("未找到符合条件的文件!", #错误图标, "批量重命名工具")
返回 ()
.如果真结束
' 根据重命名规则生成重命名后文件名列表
重命名后文件名列表 = 生成重命名后文件名列表 (筛选后的文件路径数组)
' 显示文件名预览
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (筛选后的文件路径数组), i)
_列表框_文件名预览.加入项目 (取文件名 (筛选后的文件路径数组 [i]) + " → " + 重命名后文件名列表 [i])
.计次循环尾 ()
' 保存原始文件名列表
原始文件名列表 = 取数组成员数 (筛选后的文件路径数组)
.计次循环首 (取数组成员数 (筛选后的文件路径数组), i)
原始文件名列表 [i] = 筛选后的文件路径数组 [i]
.计次循环尾 ()
.子程序 _按钮_执行重命名_被单击
' 检查是否已经预览过重命名
.如果真 (取数组成员数 (原始文件名列表) = 0 或 取数组成员数 (重命名后文件名列表) = 0)
信息框 ("请先预览重命名!", #错误图标, "批量重命名工具")
返回 ()
.如果真结束
' 备份原始文件名到日志文件中
.局部变量 备份文件, 整数型
备份文件 = 打开文件 (_编辑框_原始文件名备份路径.内容, #重写, #无限制)
.如果真 (备份文件 = -1)
信息框 ("备份原始文件名失败!", #错误图标, "批量重命名工具")
返回 ()
.如果真结束
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (原始文件名列表), i)
写出文本 (备份文件, 原始文件名列表 [i] + "|" + 重命名后文件名列表 [i] + #换行符)
.计次循环尾 ()
关闭文件 (备份文件)
' 开始执行重命名
_时钟_操作耗时.时钟周期 = 1000
操作开始时间 = 取启动时间 ()
.局部变量 成功处理文件数量, 整数型
成功处理文件数量 = 0
.局部变量 失败处理文件数量, 整数型
失败处理文件数量 = 0
.计次循环首 (取数组成员数 (原始文件名列表), i)
.局部变量 重命名结果, 逻辑型
重命名结果 = 文件_重命名 (原始文件名列表 [i], 取目录名 (原始文件名列表 [i]) + "/" + 重命名后文件名列表 [i])
.如果真 (重命名结果 = 真)
成功处理文件数量 = 成功处理文件数量 + 1
.如果真结束
.如果真 (重命名结果 = 假)
失败处理文件数量 = 失败处理文件数量 + 1
.如果真结束
.计次循环尾 ()
' 停止操作耗时的时钟
_时钟_操作耗时.时钟周期 = 0
' 统计结果
_编辑框_成功处理文件数量.内容 = 到文本 (成功处理文件数量)
_编辑框_失败处理文件数量.内容 = 到文本 (失败处理文件数量)
_编辑框_操作耗时.内容 = 到文本 (取启动时间 () - 操作开始时间) + "ms"
信息框 ("重命名成功!共处理" + 到文本 (成功处理文件数量 + 失败处理文件数量) + "个文件,其中成功" + 到文本 (成功处理文件数量) + "个,失败" + 到文本 (失败处理文件数量) + "个!", #信息图标, "批量重命名工具")
.子程序 _按钮_撤销重命名_被单击
' 检查原始文件名备份文件是否存在
.如果真 (是否存在文件 (_编辑框_原始文件名备份路径.内容) = 假)
信息框 ("原始文件名备份文件不存在!", #错误图标, "批量重命名工具")
返回 ()
.如果真结束
' 读取原始文件名备份文件
.局部变量 备份文件内容, 文本型
备份文件内容 = 到文本 (读入文件 (_编辑框_原始文件名备份路径.内容))
' 分割备份文件内容
.局部变量 备份文件内容数组, 文本型, , "0"
备份文件内容数组 = 分割文本 (备份文件内容, #换行符, )
' 开始执行撤销重命名
_时钟_操作耗时.时钟周期 = 1000
操作开始时间 = 取启动时间 ()
.局部变量 成功处理文件数量, 整数型
成功处理文件数量 = 0
.局部变量 失败处理文件数量, 整数型
失败处理文件数量 = 0
.计次循环首 (取数组成员数 (备份文件内容数组), i)
.如果真 (备份文件内容数组 [i] = "")
继续循环 ()
.如果真结束
.局部变量 文件路径数组, 文本型, , "0"
文件路径数组 = 分割文本 (备份文件内容数组 [i], "|", )
.局部变量 撤销重命名结果, 逻辑型
撤销重命名结果 = 文件_重命名 (文件路径数组 [1], 文件路径数组 [0])
.如果真 (撤销重命名结果 = 真)
成功处理文件数量 = 成功处理文件数量 + 1
.如果真结束
.如果真 (撤销重命名结果 = 假)
失败处理文件数量 = 失败处理文件数量 + 1
.如果真结束
.计次循环尾 ()
' 停止操作耗时的时钟
_时钟_操作耗时.时钟周期 = 0
' 统计结果
_编辑框_成功处理文件数量.内容 = 到文本 (成功处理文件数量)
_编辑框_失败处理文件数量.内容 = 到文本 (失败处理文件数量)
_编辑框_操作耗时.内容 = 到文本 (取启动时间 () - 操作开始时间) + "ms"
' 清空文件名预览列表
_列表框_文件名预览.清空 ()
' 清空原始文件名列表和重命名后文件名列表
清除数组 (原始文件名列表)
清除数组 (重命名后文件名列表)
' 删除原始文件名备份文件
删除文件 (_编辑框_原始文件名备份路径.内容)
信息框 ("撤销重命名成功!共处理" + 到文本 (成功处理文件数量 + 失败处理文件数量) + "个文件,其中成功" + 到文本 (成功处理文件数量) + "个,失败" + 到文本 (失败处理文件数量) + "个!", #信息图标, "批量重命名工具")
模块2:公共函数代码
e
.版本 2
.支持库 spec
.支持库 eFile
.子程序 筛选文件, 文本型, , "0" ' 参数:文件路径数组,返回:筛选后的文件路径数组
.参数 文件路径数组, 文本型, , "0"
.局部变量 筛选后的文件路径数组, 文本型, , "0"
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (文件路径数组), i)
.局部变量 符合条件, 逻辑型
符合条件 = 真
' 检查文件格式
.如果真 (_编辑框_文件格式.内容 ≠ "")
.如果真 (寻找文本 (_编辑框_文件格式.内容, "|", , 真) ≠ -1)
' 多个文件格式
.局部变量 文件格式数组, 文本型, , "0"
文件格式数组 = 分割文本 (_编辑框_文件格式.内容, "|", )
.局部变量 j, 整数型
.局部变量 文件格式符合条件, 逻辑型
文件格式符合条件 = 假
.计次循环首 (取数组成员数 (文件格式数组), j)
.如果真 (取文本右边 (取文件名 (文件路径数组 [i]), 取文本长度 (文件格式数组 [j])) = 文件格式数组 [j])
文件格式符合条件 = 真
跳出循环 ()
.如果真结束
.计次循环尾 ()
.如果真 (文件格式符合条件 = 假)
符合条件 = 假
.如果真结束
.如果真结束
.如果真 (寻找文本 (_编辑框_文件格式.内容, "|", , 真) = -1)
' 单个文件格式
.如果真 (取文本右边 (取文件名 (文件路径数组 [i]), 取文本长度 (_编辑框_文件格式.内容)) ≠ _编辑框_文件格式.内容)
符合条件 = 假
.如果真结束
.如果真结束
.如果真结束
' 检查文件大小范围
.如果真 (_编辑框_文件大小最小.内容 ≠ "" 或 _编辑框_文件大小最大.内容 ≠ "")
.局部变量 文件大小, 整数型
文件大小 = 文件_取大小 (文件路径数组 [i]) / 1024 ' 转换为KB
.如果真 (_编辑框_文件大小最小.内容 ≠ "" 且 文件大小 < 到数值 (_编辑框_文件大小最小.内容))
符合条件 = 假
.如果真结束
.如果真 (_编辑框_文件大小最大.内容 ≠ "" 且 文件大小 > 到数值 (_编辑框_文件大小最大.内容))
符合条件 = 假
.如果真结束
.如果真结束
' 如果符合条件,则加入筛选后的文件路径数组
.如果真 (符合条件 = 真)
加入成员 (筛选后的文件路径数组, 文件路径数组 [i])
.如果真结束
.计次循环尾 ()
返回 (筛选后的文件路径数组)
.子程序 生成重命名后文件名列表, 文本型, , "0" ' 参数:文件路径数组,返回:重命名后文件名列表
.参数 文件路径数组, 文本型, , "0"
.局部变量 重命名后文件名列表, 文本型, , "0"
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (文件路径数组), i)
.局部变量 原始文件名, 文本型
原始文件名 = 取文件名 (文件路径数组 [i])
.局部变量 重命名后文件名, 文本型
' 根据重命名规则生成重命名后文件名
.判断开始 (_组合框_重命名规则.现行选中项 = 0)
' 顺序编号
重命名后文件名 = 到文本 (i) + 取文本右边 (原始文件名, 取文本长度 (原始文件名) - 取文本长度 (取文本左边 (原始文件名, 取文本长度 (原始文件名) - 取文本长度 (取扩展名 (原始文件名)))))
.判断 (_组合框_重命名规则.现行选中项 = 1)
' 添加前缀
重命名后文件名 = _编辑框_前缀.内容 + 原始文件名
.判断 (_组合框_重命名规则.现行选中项 = 2)
' 添加后缀
.局部变量 文件名前缀, 文本型
文件名前缀 = 取文本左边 (原始文件名, 取文本长度 (原始文件名) - 取文本长度 (取扩展名 (原始文件名)))
.局部变量 文件扩展名, 文本型
文件扩展名 = 取扩展名 (原始文件名)
重命名后文件名 = 文件名前缀 + _编辑框_后缀.内容 + "." + 文件扩展名
.判断 (_组合框_重命名规则.现行选中项 = 3)
' 替换特定字符
重命名后文件名 = 替换文本 (原始文件名, _编辑框_要替换的字符.内容, _编辑框_替换后的字符.内容, , , 真)
.判断 (_组合框_重命名规则.现行选中项 = 4)
' 按文件属性重命名
' 这里可以添加按文件属性重命名的代码,如按创建时间、修改时间、文件大小重命名
重命名后文件名 = 原始文件名
.默认
重命名后文件名 = 原始文件名
.判断结束
' 加入重命名后文件名列表
加入成员 (重命名后文件名列表, 重命名后文件名)
.计次循环尾 ()
返回 (重命名后文件名列表)
1.32.3.2 项目2:批量Excel数据处理工具 📊
项目需求分析 :
✅ 功能需求:
- 基础功能:遍历指定目录下的所有Excel文件,根据规则批量处理Excel数据(如读取数据、写入数据、数据清洗、数据统计);
- 筛选功能:根据文件的格式、大小、创建时间、修改时间等条件筛选出需要处理的Excel文件;
- 规则设置功能:支持多种数据处理规则,如读取数据到SQLite数据库、写入数据到Excel文件、数据清洗(删除重复行、删除空行、格式转换)、数据统计(求和、求平均、求最大值、求最小值);
- 辅助功能 :操作前预览Excel文件的内容,操作后统计结果并保存到日志文件中;
✅ 非功能需求: - 界面设计:功能分区明确(目录选择区、筛选条件区、规则设置区、预览区、操作区、结果统计区)、简洁美观;
- 数据安全:操作前自动备份原始Excel文件到日志文件中,操作后支持撤销数据处理;
- 响应时间:操作响应时间不超过1秒,处理100个Excel文件的时间不超过30秒;
界面设计 (组件箱拖拽+属性表配置):
与批量重命名工具类似,只需要修改规则设置区的组件为数据处理相关的组件即可。
代码实现(核心公共函数代码):
e
.版本 2
.支持库 spec
.支持库 eFile
.支持库 eExcel
.支持库 eSQLite
.子程序 批量处理Excel数据, , , 参数:文件路径数组,数据处理规则
.参数 文件路径数组, 文本型, , "0"
.参数 数据处理规则, 整数型
.局部变量 操作开始时间, 整数型
操作开始时间 = 取启动时间 ()
.局部变量 成功处理文件数量, 整数型
成功处理文件数量 = 0
.局部变量 失败处理文件数量, 整数型
失败处理文件数量 = 0
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (文件路径数组), i)
.局部变量 处理结果, 逻辑型
.判断开始 (数据处理规则 = 0)
' 读取数据到SQLite数据库
处理结果 = 读取Excel数据到SQLite数据库 (文件路径数组 [i])
.判断 (数据处理规则 = 1)
' 写入数据到Excel文件
处理结果 = 写入SQLite数据到Excel文件 (文件路径数组 [i])
.判断 (数据处理规则 = 2)
' 数据清洗
处理结果 = 清洗Excel数据 (文件路径数组 [i])
.判断 (数据处理规则 = 3)
' 数据统计
处理结果 = 统计Excel数据 (文件路径数组 [i])
.默认
处理结果 = 假
.判断结束
.如果真 (处理结果 = 真)
成功处理文件数量 = 成功处理文件数量 + 1
.如果真结束
.如果真 (处理结果 = 假)
失败处理文件数量 = 失败处理文件数量 + 1
.如果真结束
.计次循环尾 ()
' 统计结果
_编辑框_成功处理文件数量.内容 = 到文本 (成功处理文件数量)
_编辑框_失败处理文件数量.内容 = 到文本 (失败处理文件数量)
_编辑框_操作耗时.内容 = 到文本 (取启动时间 () - 操作开始时间) + "ms"
信息框 ("数据处理成功!共处理" + 到文本 (成功处理文件数量 + 失败处理文件数量) + "个Excel文件,其中成功" + 到文本 (成功处理文件数量) + "个,失败" + 到文本 (失败处理文件数量) + "个!", #信息图标, "批量Excel数据处理工具")
.子程序 读取Excel数据到SQLite数据库, 逻辑型 ' 参数:Excel文件路径,返回:处理结果
.参数 Excel文件路径, 文本型
' 创建SQLite数据库连接
.局部变量 数据库连接, SQL连接句柄
数据库连接 = SQL打开数据库 (取运行目录 () + "/Excel数据.db")
' 检查数据库连接是否成功
.如果真 (数据库连接 = 0)
调试输出 ("SQLite数据库连接失败:" + SQL取错误信息 ())
返回 (假)
.如果真结束
' 创建Excel数据表格
SQL执行语句 (数据库连接, "CREATE TABLE IF NOT EXISTS excel_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_name TEXT NOT NULL,
sheet_name TEXT NOT NULL,
row_index INTEGER NOT NULL,
column_index INTEGER NOT NULL,
cell_value TEXT NOT NULL
)")
' 打开Excel文件
.局部变量 Excel工作簿, 对象
Excel工作簿.创建 ("Excel.Application")
.局部变量 Excel文件对象, 对象
Excel文件对象 = Excel工作簿.读属性 ("Workbooks").数值方法 ("Open", Excel文件路径)
' 遍历Excel文件的所有工作表
.局部变量 工作表数量, 整数型
工作表数量 = Excel文件对象.读属性 ("Worksheets").读属性 ("Count")
.局部变量 j, 整数型
.计次循环首 (工作表数量, j)
.局部变量 工作表对象, 对象
工作表对象 = Excel文件对象.读属性 ("Worksheets").数值方法 ("Item", j)
' 遍历工作表的所有单元格
.局部变量 行数, 整数型
行数 = 工作表对象.读属性 ("UsedRange").读属性 ("Rows").读属性 ("Count")
.局部变量 k, 整数型
.计次循环首 (行数, k)
.局部变量 列数, 整数型
列数 = 工作表对象.读属性 ("UsedRange").读属性 ("Columns").读属性 ("Count")
.局部变量 l, 整数型
.计次循环首 (列数, l)
' 读取单元格值
.局部变量 单元格值, 文本型
单元格值 = 工作表对象.读属性 ("Cells").数值方法 ("Item", k, l).读属性 ("Value")
' 插入单元格值到SQLite数据库
.局部变量 插入SQL语句, 文本型
插入SQL语句 = "INSERT INTO excel_data (file_name, sheet_name, row_index, column_index, cell_value) VALUES ('" + 取文件名 (Excel文件路径) + "', '" + 工作表对象.读属性 ("Name") + "', " + 到文本 (k) + ", " + 到文本 (l) + ", '" + 单元格值 + "')"
SQL执行语句 (数据库连接, 插入SQL语句)
.计次循环尾 ()
.计次循环尾 ()
.计次循环尾 ()
' 关闭Excel文件
Excel文件对象.数值方法 ("Close", )
' 退出Excel应用程序
Excel工作簿.数值方法 ("Quit", )
' 释放Excel工作簿对象和Excel文件对象
Excel工作簿.释放 ()
Excel文件对象.释放 ()
' 断开SQLite数据库连接
SQL关闭数据库 (数据库连接)
返回 (真)
由于篇幅限制,这里只列出了2个自动化脚本项目的核心代码,剩余2个项目(批量图片压缩工具、批量文本文件替换工具)可以在本书的配套资源库中找到。
1.32.4 文件批量操作的性能优化------处理大量文件时的效率提升 🌟
处理大量文件时,文件批量操作的性能会成为一个瓶颈。为了帮助你提升处理大量文件时的效率,我整理了一份文件批量操作的性能优化经验,分为四大类。
1.32.4.1 操作优化
✅ 使用多线程操作 :将文件批量操作任务分解为多个子任务,使用多线程同时执行,提高处理效率;
✅ 使用分块处理 :处理大文件时,将文件分为多个小块,逐块处理,避免内存不足;
✅ 使用缓存机制 :缓存常用的文件属性(如文件大小、创建时间、修改时间),避免重复读取;
✅ 使用异步操作:使用异步操作代替同步操作,提高程序的响应时间;
1.32.4.2 文件路径优化
✅ 使用绝对路径 :使用绝对路径代替相对路径,避免路径解析错误;
✅ 缩短文件路径 :缩短文件路径,避免文件路径过长导致的错误;
✅ 使用文件系统对象:使用易语言的文件系统对象代替传统的文件操作函数,提高操作效率;
1.32.4.3 文件筛选优化
✅ 提前筛选文件 :在遍历目录时提前筛选文件,避免遍历不需要处理的文件;
✅ 使用正则表达式筛选文件 :使用正则表达式筛选文件,提高筛选效率;
✅ 使用缓存机制存储筛选结果:缓存筛选结果,避免重复筛选;
1.32.4.4 文件操作优化
✅ 使用二进制文件操作 :处理二进制文件时,使用二进制文件操作函数代替文本文件操作函数,提高操作效率;
✅ 使用缓冲区 :使用缓冲区读取和写入文件,避免频繁的磁盘IO操作;
✅ 关闭文件资源:操作完成后及时关闭文件资源,释放系统资源;
1.32.5 文件批量操作常见问题排查手册 🚨
在文件批量操作开发过程中,你可能会遇到各种各样的问题,有些问题看起来很简单,但解决起来却很麻烦;有些问题看起来很复杂,但解决起来却很简单。为了帮助你快速解决这些问题,我整理了一份文件批量操作常见问题排查手册,分为五大类,每类3个问题,共15个。
1.32.5.1 遍历目录问题(3个)
问题1:遍历目录时漏掉子目录下的文件
问题现象 :遍历指定目录下的所有文件时,只遍历了根目录下的文件,漏掉了子目录下的文件。
原因分析 :
使用了"文件_枚举目录"函数,该函数默认只遍历根目录下的文件,不遍历子目录下的文件。
解决方案 :
使用"文件_遍历目录"函数,该函数默认遍历根目录下的所有文件和子目录下的所有文件。
代码示例:
e
.版本 2
.支持库 eFile
.子程序 遍历目录, 文本型, , "0" ' 参数:目录路径,返回:文件路径数组
.参数 目录路径, 文本型
.局部变量 文件路径数组, 文本型, , "0"
文件路径数组 = 文件_遍历目录 (目录路径, 真, 真)
返回 (文件路径数组)
问题2:遍历目录时处理符号链接和隐藏文件
问题现象 :遍历指定目录下的所有文件时,处理了符号链接和隐藏文件,导致操作失败。
原因分析 :
"文件_遍历目录"函数默认处理符号链接和隐藏文件。
解决方案 :
修改"文件_遍历目录"函数的参数,不处理符号链接和隐藏文件。
代码示例:
e
.版本 2
.支持库 eFile
.子程序 遍历目录, 文本型, , "0" ' 参数:目录路径,返回:文件路径数组
.参数 目录路径, 文本型
.局部变量 文件路径数组, 文本型, , "0"
文件路径数组 = 文件_遍历目录 (目录路径, 真, 假) ' 不处理隐藏文件
' 过滤符号链接
.局部变量 过滤后的文件路径数组, 文本型, , "0"
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (文件路径数组), i)
.如果真 (文件_取属性 (文件路径数组 [i]) = 0)
加入成员 (过滤后的文件路径数组, 文件路径数组 [i])
.如果真结束
.计次循环尾 ()
返回 (过滤后的文件路径数组)
问题3:遍历目录时程序卡死
问题现象 :遍历包含大量文件的目录时,程序卡死。
原因分析 :
使用了同步遍历目录的方法,遍历包含大量文件的目录时,程序会一直等待遍历完成,导致卡死。
解决方案 :
使用异步遍历目录的方法,或者使用多线程遍历目录的方法。
1.32.6 补充篇总结与文件批量操作未来发展方向 📜
1.32.6.1 本章核心收获
- ✅ 构建文件批量操作思维框架:掌握"遍历目录→筛选文件→执行操作→结果统计"的四步标准化操作模式;
- ✅ 精通常用格式文件的批量处理:学会批量处理文本文件、Excel文件、图片文件、PDF文件的方法;
- ✅ 开发实用的自动化脚本:完成4个常用的自动化脚本项目------批量重命名工具、批量Excel数据处理工具、批量图片压缩工具、批量文本文件替换工具;
- ✅ 掌握文件批量操作的性能优化:学习处理大量文件时的性能优化经验,如多线程操作、分块处理、缓存机制、文件路径优化。
1.32.6.2 文件批量操作未来发展方向
文件批量操作的未来发展方向主要有以下5个:
💡 AI辅助开发 :进一步优化AI辅助开发工具,根据用户的需求自动生成文件批量操作脚本;
💡 跨平台开发 :进一步完善跨平台开发工具,让文件批量操作脚本可以在Windows、macOS、Linux等平台上运行;
💡 低代码开发 :进一步完善低代码开发平台,让用户通过拖拽和配置的方式开发文件批量操作脚本;
💡 云端服务 :提供文件批量操作的云端服务,用户可以上传文件到云端,使用云端的服务器处理文件,提高处理效率;
💡 自动化部署:提供文件批量操作脚本的自动化部署服务,用户可以将脚本部署到服务器上,定时执行脚本;
🎉 易语言开发从入门到精通的文件批量操作补充篇·办公自动化与本地数据处理加速器·深度实战与性能优化,至此结束!愿你在易语言的世界里,不断学习,不断进步,开发出更多"小而美、快而灵、智而强"的文件批量操作脚本,大幅提升工作效率!
