有没有高效 xls 转 xlsx 格式的 cli 工具

2023-03-15 21:49:54 +08:00
 faketemp

请教各位收藏的有没有 windows 平台 xls 转 xlsx 的命令行程序,理想的需求是:

G 了好久,只找到一款相对最贴合需求的b2xtranslator
但实测转出来的 xlsx 用 Excel 闪退压根无法打开

反复翻找多天无果 来这里求助大佬

1258 次点击
所在节点    问与答
18 条回复
rsy
2023-03-15 22:06:54 +08:00
通过命令行打开 xlsm 文件,xlsm 里面写入相关 VBA 代码,打开 xls 文件然后另存为 xlsx 文件,然后在 VBA 中增加 workbook 的 open 事件,此事件会在文件打开时触发

反正这个需求用 VBA 实现很简单,只要电脑上有 Office 就行
nightwitch
2023-03-15 22:43:09 +08:00
https://paste.ubuntu.com/p/GQV7HXRVMk/

最简单的就是利用 wps 或者 microsoft office 的 com 接口,前提是执行转换的电脑上得有这两个软件之一。
代码我测试过了没问题
paulluis2dev
2023-03-15 22:52:58 +08:00
可以试试 LibreOffice ,支持命令行调用,免费,缺点:体积大
wxg4net
2023-03-15 22:54:14 +08:00
libreoffice 中 soffice 支持命令行文件格式转换,写个批处理就能遍历转换了
tool2d
2023-03-15 23:00:06 +08:00
微软有个 Office 2007 -> 2003 文件格式转换工具,有个叫 moc.exe 的 cli 工具可以。
tomczhen
2023-03-15 23:33:16 +08:00
如果只是要数据,可以用 ODBC 来读 xls 。
mxT52CRuqR6o5
2023-03-16 00:11:19 +08:00
找个 office 批量转 pdf 的 vbs ,改改就行
fzinfz
2023-03-16 01:17:07 +08:00
xxx027
2023-03-16 05:38:14 +08:00
关键字 xls to xlsx online api 没有找到合适的吗?
faketemp
2023-03-16 06:44:54 +08:00
@fzinfz 好是好 只是自己用可以 分发不便
@xxx027 内网使用场景 且数据可能涉密 无法使用 online 服务
faketemp
2023-03-16 07:05:46 +08:00
mingoing428
2023-03-16 09:29:32 +08:00
我以为把扩展名改一下就好了
vZexc0m
2023-03-16 10:30:18 +08:00
这年头十几兆的体积也算大吗?想要无依赖可以用 go 写一个
faketemp
2023-03-16 11:23:02 +08:00
@vZexc0m 这就要从业务场景出发了 十几兆大不大关键得看里面实现了多少功能不是 写个计算器都十几兆个人觉得不太合适
而且自己用十几兆确实不算大 考虑到分发就诸多不便

第一时间想过 go 但据了解 excelize 完全不支持 xls 格式 其他 xls 库多有格式兼容问题 总之目前相关第三方库确有诸多不便 自己造轮子前的好习惯就是来找神通广大 v 友取取经ヾノ≧∀≦)o
mxT52CRuqR6o5
2023-03-16 11:54:40 +08:00
用 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."

```
mxT52CRuqR6o5
2023-03-16 12:03:38 +08:00
faketemp
2023-03-16 14:06:08 +08:00
参考楼上资料 改了一版实测可用
将 xls 文件自动批量转换为 xlsx 格式的 VBS 脚本(原理上调用本机 Office COM 接口)
目前各种解决方案暂未找到比这更优雅合适的

支持单 xls 文件拖放、多 xls 文件拖放、目录拖放、混合拖放等,源码可见
https://github.com/playGitboy/xls2xlsx

感谢各位指导!
faketemp
2023-03-21 11:42:44 +08:00
@vZexc0m 听你的 寻而不得就闭门造车(●'◡'●)

Golang 改写一款,单程序无依赖体积小多平台,且不依赖本机 Office/WPS ,基本可用了
https://github.com/playGitboy/xls2xlsx-go

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/924329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX