Unix服务器下多工作表Excel .xls转.xlsx解决方案求助
在Unix服务器上把.xls转.xlsx的可行方案
我来给你几个亲测有效的解决方案,毕竟改扩展名这种操作只是自欺欺人(实际格式根本没转),LibreOffice可能是你没用到正确的无头模式命令,往下看:
方法1:用ssconvert(Gnumeric工具)
这是专门为命令行设计的电子表格转换工具,比LibreOffice轻量,转换成功率也很高。
- 先安装Gnumeric:
- Debian/Ubuntu系统:
sudo apt-get install gnumeric - CentOS/RHEL系统:
sudo yum install gnumeric
- Debian/Ubuntu系统:
- 执行转换命令:
批量转换的话可以用:ssconvert input.xls output.xlsxssconvert --export-type=Gnumeric_Excel:xlsx *.xls
方法2:修正LibreOffice的无头模式命令
你之前可能没用到正确的参数,LibreOffice在服务器上必须用无头模式(无图形界面)才能正常工作:
- 转换单个文件:
libreoffice --headless --convert-to xlsx input.xls - 批量转换所有.xls文件:
libreoffice --headless --convert-to xlsx *.xls - 如果还是失败,大概率是服务器缺字体导致的,安装基础字体包试试:
Debian/Ubuntu:sudo apt-get install fonts-dejavu-core
CentOS/RHEL:sudo yum install dejavu-sans-fonts
方法3:用Python的pandas库(适合自定义需求)
如果服务器有Python环境,这个方法灵活度很高,还能顺便做数据清洗:
- 先安装依赖包:
(xlrd负责读取.xls,openpyxl负责写入.xlsx)pip install pandas xlrd openpyxl - 写个简单的转换脚本(比如命名为
convert.py):import pandas as pd # 读取xls文件 df = pd.read_excel('input.xls', engine='xlrd') # 写入xlsx文件,index=False是去掉行索引 df.to_excel('output.xlsx', engine='openpyxl', index=False) - 运行脚本:
批量转换的话可以循环处理目录下的所有.xls文件,稍微改下脚本就行。python convert.py
注意事项
- 转换前一定要备份原文件,避免意外情况丢失数据;
- 如果你的.xls是加密文件,以上工具都无法直接处理,需要先解密;
- 大文件的话,ssconvert或pandas的速度会比LibreOffice快很多。
内容的提问来源于stack exchange,提问作者Tech_hunter
相关产品推荐
相关产品推荐

