ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 273|回复: 8

[已解决] 批量将文件夹内的文件格式修改为.docx。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-11-6 15:44 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 食昆食屯 于 2024-11-7 17:42 编辑

我的需求:将一个文件内所有的.doc文件,都变成.docx(不用判断,文件夹里的文件都是.doc格式,就是数量比较多1000+)
限制:不能用vba(电脑里没有office),不能用其他专业编程语言如Python,电脑不能联网,现在电脑里就要一个2022版的wps,所有文件编辑都是用wps,环境特殊请见谅。
我的水平JS宏是一点会不,vba可以看懂ai的代码,可以改。
我用 AI生成的了好几版,也用了好几种AI(KIMI、讯飞星火、豆包、通义千问)修正几次后都差不多了,最后的版本如下:
  1. function ConvertFilesToDocx() {
  2.     var folderPath = "C:\\Users\\suihe\\Desktop\\转存测试"; // 指定文件夹路径

  3.     // 使用WPS Office的内置方法获取文件列表
  4.     var files = getFilesInFolder(folderPath);

  5.     for (var i = 0; i < files.length; i++) {
  6.         var filePath = files[i];
  7.         var ext = getFileExtension(filePath).toLowerCase();

  8.         if (ext == "doc" || ext == "rtf" || ext == "txt") { // 可以根据需要添加更多文件类型
  9.             try {
  10.                 var doc = Application.Documents.Open(filePath);
  11.                 var newFilePath = getNewFilePath(filePath, ".docx");
  12.                 doc.SaveAs(newFilePath, 12); // 12 表示 .docx 格式
  13.                 doc.Close(false);
  14.                 WScript.Echo("已成功转换文件: " + filePath);
  15.             } catch (e) {
  16.                 WScript.Echo("转换文件失败: " + filePath + ", 错误信息: " + e.message);
  17.             }
  18.         }
  19.     }
  20. }

  21. // 辅助函数:获取文件夹中的所有文件
  22. function getFilesInFolder(folderPath) {
  23.     var files = [];
  24.     var shell = Application.CreateObject("Shell.Application");//这里总是错误!!!!!
  25.     var folder = shell.NameSpace(folderPath);
  26.     var items = folder.Items();

  27.     for (var i = 0; i < items.Count; i++) {
  28.         var item = items.Item(i);
  29.         var filePath = folderPath + "\" + item.Name;
  30.         files.push(filePath);
  31.     }

  32.     return files;
  33. }

  34. // 辅助函数:获取文件扩展名
  35. function getFileExtension(filePath) {
  36.     var lastDotIndex = filePath.lastIndexOf(".");
  37.     if (lastDotIndex === -1) return "";
  38.     return filePath.substring(lastDotIndex + 1);
  39. }

  40. // 辅助函数:生成新的文件路径
  41. function getNewFilePath(oldFilePath, newExt) {
  42.     var lastDotIndex = oldFilePath.lastIndexOf(".");
  43.     if (lastDotIndex === -1) return oldFilePath + newExt;
  44.     return oldFilePath.substring(0, lastDotIndex) + newExt;
  45. }
复制代码
主要卡主的位置已经标记,让ai修正就是CreateObject、ActiveXObject、FSObject三个反复变动,但是代码就是过不去,显示错误如下:
1730878271945.png
求大神指导,代码到底要怎么写,如果有其他解决方案批量修改文件格式也行,求大神指导!

TA的精华主题

TA的得分主题

发表于 2024-11-6 19:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
JSA用2行代码批量更改文件后缀名
https://club.excelhome.net/thread-1705404-1-1.html

TA的精华主题

TA的得分主题

发表于 2024-11-6 21:05 | 显示全部楼层
就这点需求,就不能用软件吗?针对这个问题,网上有不少的软件,搜索一下就有了,或者装一个Excel插件,如方方格子、Excel必备工具箱等

TA的精华主题

TA的得分主题

发表于 2024-11-6 21:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你的版本是2022年的,好多语法不支持,不如下载一个VBA宏,用VBA来解决更合适你的WPS版本

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-6 21:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lizhipei78 发表于 2024-11-6 21:05
就这点需求,就不能用软件吗?针对这个问题,网上有不少的软件,搜索一下就有了,或者装一个Excel插件,如 ...

客户电脑 不允许联网、不循序插U盘,更不允许导入插件或者第三方软件,电脑里现在就1个2022版本的wps,没有VB库,写不了vba代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-6 21:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lizhipei78 发表于 2024-11-6 21:06
你的版本是2022年的,好多语法不支持,不如下载一个VBA宏,用VBA来解决更合适你的WPS版本

客户电脑 不允许联网、不允许插U盘、不允许导入插件或第三方软件,就一个只有能用JS宏的2022版wps

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-7 17:13 | 显示全部楼层
spaghetti8 发表于 2024-11-6 19:48
JSA用2行代码批量更改文件后缀名
https://club.excelhome.net/thread-1705404-1-1.html

在客户电脑测试了,代码运行后无反应,未成功。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-7 17:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
问题已经解决,再此说明一下。
阶段一,获取vba,与客户沟通按照了office 2007,这是客户能按的最高版本,然后我编写vba宏转存,但失败了。失败的原因是,文件有保护密码,防止编辑,使用office 2007 因为兼容问题,文件打不开,运行宏的效果就是不报错,一直显示在运行,但没有任何效果,后来就未响应了。
实际测试下,源文件是由软件生产的带保护的DOC格式,如果没有保护,文件用office2007能打开,如果格式是DOCX,即使有保护office2007也能打开。结论:想用office 2007的vba操作文件,要么这个文件没保护,要么这个文件是DOCX格式,可我就是要转换为docx格式

阶段二,解密后再转存,我先用的vba编写文档批量解密代码,但是不好用,因为office运行代码,第一步是打开文件,但文件打不开,宏就是卡主未响应,然后试着用wps JS宏批量解密,失败了,怎么改宏就是没法运行。

阶段三,曲线救国,最后是用excel 获取了文件的地址,然后用excel vba 编写宏 按单元格中地址 用wps打开文件,执行wps中一段JS宏,实现了批量文件转存。
所以需要写三段宏,
1、在excel中获取文件地址的宏
2、在wps 中 用JS宏 写一个另存为docx的宏
3、在excel中写一个 按获取地址打开文件,并调用打开文件中宏的宏。

一步一坎

TA的精华主题

TA的得分主题

发表于 2024-12-7 09:16 | 显示全部楼层
食昆食屯 发表于 2024-11-7 17:39
问题已经解决,再此说明一下。
阶段一,获取vba,与客户沟通按照了office 2007,这是客户能按的最高版本, ...

你这么解决太麻烦了,看看下面这几样代码直接解决了你的关键问题:
// 打开文件夹中的所有.doc文档文件
        var folderPath = "H:\\word表格信息操作宏命令\\干部审批表"; // 替换为你的文件夹路径
        var docExt = "doc"; // 替换为你想要打开的文档文件扩展名
        var files = Dir(folderPath + "\\" + "*." + docExt); // 列出文件夹中的所有.doc文档文件
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 15:46 , Processed in 0.047400 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表