请教各位收藏的有没有 windows 平台 xls 转 xlsx 的命令行程序,理想的需求是:
G 了好久,只找到一款相对最贴合需求的b2xtranslator
但实测转出来的 xlsx 用 Excel 闪退压根无法打开
反复翻找多天无果 来这里求助大佬
1
rsy 2023-03-15 22:06:54 +08:00 via Android 1
通过命令行打开 xlsm 文件,xlsm 里面写入相关 VBA 代码,打开 xls 文件然后另存为 xlsx 文件,然后在 VBA 中增加 workbook 的 open 事件,此事件会在文件打开时触发
反正这个需求用 VBA 实现很简单,只要电脑上有 Office 就行 |
2
nightwitch 2023-03-15 22:43:09 +08:00 1
https://paste.ubuntu.com/p/GQV7HXRVMk/
最简单的就是利用 wps 或者 microsoft office 的 com 接口,前提是执行转换的电脑上得有这两个软件之一。 代码我测试过了没问题 |
3
paulluis2dev 2023-03-15 22:52:58 +08:00 1
可以试试 LibreOffice ,支持命令行调用,免费,缺点:体积大
|
4
wxg4net 2023-03-15 22:54:14 +08:00 via Android 1
libreoffice 中 soffice 支持命令行文件格式转换,写个批处理就能遍历转换了
|
5
tool2d 2023-03-15 23:00:06 +08:00 1
微软有个 Office 2007 -> 2003 文件格式转换工具,有个叫 moc.exe 的 cli 工具可以。
|
6
tomczhen 2023-03-15 23:33:16 +08:00 via Android
如果只是要数据,可以用 ODBC 来读 xls 。
|
7
mxT52CRuqR6o5 2023-03-16 00:11:19 +08:00 via Android 1
找个 office 批量转 pdf 的 vbs ,改改就行
|
8
fzinfz 2023-03-16 01:17:07 +08:00
xlwings ,直接控制 excel UI: https://docs.xlwings.org/en/latest/connect_to_workbook.html
|
9
xxx027 2023-03-16 05:38:14 +08:00 via Android
关键字 xls to xlsx online api 没有找到合适的吗?
|
10
faketemp OP |
11
faketemp OP |
12
mingoing428 2023-03-16 09:29:32 +08:00
我以为把扩展名改一下就好了
|
13
vZexc0m 2023-03-16 10:30:18 +08:00
这年头十几兆的体积也算大吗?想要无依赖可以用 go 写一个
|
14
faketemp OP @vZexc0m 这就要从业务场景出发了 十几兆大不大关键得看里面实现了多少功能不是 写个计算器都十几兆个人觉得不太合适
而且自己用十几兆确实不算大 考虑到分发就诸多不便 第一时间想过 go 但据了解 excelize 完全不支持 xls 格式 其他 xls 库多有格式兼容问题 总之目前相关第三方库确有诸多不便 自己造轮子前的好习惯就是来找神通广大 v 友取取经ヾノ≧∀≦)o |
15
mxT52CRuqR6o5 2023-03-16 11:54:40 +08:00 1
用 chatgpt 写了一份,简单 review 了一下似乎是没有大问题
关键的那一行 objWorkbook.SaveAs strNewFile, 51 我不太确定 51 是否对应 xlsx 格式 还有就是把 objExcel 提到循环外面来运行效率会更高一些,不然每一次循环都会打开 excel 关闭 excel 还还有就是生成新文件名变量 strNewFile 时,没有利用到 objFSO 简化代码,而是用了 Left&Len 搁那儿截来截去,可读性不是很好 Please write a vbs script that can batch covert xls to xlsx. ``` Option Explicit Dim objFSO, objFolder, objFiles, objExcel, objWorkbook Dim strFolderPath, strExtension, strNewExtension, strFile, strNewFile ' set the folder path containing the XLS files strFolderPath = "C:\Users\Username\Desktop\XLS_Files" ' set the file extension to look for strExtension = ".xls" ' set the new file extension strNewExtension = ".xlsx" ' create file system object Set objFSO = CreateObject("Scripting.FileSystemObject") ' get the folder object Set objFolder = objFSO.GetFolder(strFolderPath) ' loop through all files in the folder For Each objFiles In objFolder.Files ' check if file extension matches If Right(objFiles.Name, Len(strExtension)) = strExtension Then ' create new file name with new extension strFile = objFiles.Path strNewFile = Left(strFile, Len(strFile) - Len(strExtension)) & strNewExtension ' create Excel object Set objExcel = CreateObject("Excel.Application") ' open workbook Set objWorkbook = objExcel.Workbooks.Open(strFile) ' save as XLSX file objWorkbook.SaveAs strNewFile, 51 ' close workbook and Excel object objWorkbook.Close False objExcel.Quit ' release Excel objects Set objWorkbook = Nothing Set objExcel = Nothing End If Next ' release file system objects Set objFiles = Nothing Set objFolder = Nothing Set objFSO = Nothing WScript.Echo "All XLS files converted to XLSX." ``` |
16
mxT52CRuqR6o5 2023-03-16 12:03:38 +08:00 1
|
17
faketemp OP 参考楼上资料 改了一版实测可用
将 xls 文件自动批量转换为 xlsx 格式的 VBS 脚本(原理上调用本机 Office COM 接口) 目前各种解决方案暂未找到比这更优雅合适的 支持单 xls 文件拖放、多 xls 文件拖放、目录拖放、混合拖放等,源码可见 https://github.com/playGitboy/xls2xlsx 感谢各位指导! |
18
faketemp OP @vZexc0m 听你的 寻而不得就闭门造车(●'◡'●)
Golang 改写一款,单程序无依赖体积小多平台,且不依赖本机 Office/WPS ,基本可用了 https://github.com/playGitboy/xls2xlsx-go |