office文件批量转换——如vsd/vsdx转pdf,xls转xlsx等
通过soffice.exe实现格式
单文件转换语法:
soffice.exe --headless --convert-to 格式名 源文件 --outdir 输出目录
Writer(文字文档,doc/docx/odt)
| 格式名 | 输出文件 | 说明 |
|---|---|---|
docx |
.docx |
Word2007+ 开放 XML(最常用) |
doc |
.doc |
Word97‑2003 旧格式 |
odt |
.odt |
LibreOffice 原生文档 |
ott |
.ott |
ODT 模板 |
rtf |
.rtf |
富文本 |
txt |
.txt |
纯文本 |
html |
.html |
网页 |
xhtml |
.xhtml |
XHTML 网页 |
pdf |
.pdf |
PDF 导出 |
fodt |
.fodt |
扁平 XML 单文件 ODT |
Calc(表格 xls/xlsx/ods)
| 格式名 | 输出文件 | 说明 |
|---|---|---|
xlsx |
.xlsx |
Excel2007+ |
xls |
.xls |
Excel97‑2003 |
ods |
.ods |
LibreOffice 原生表格 |
ots |
.ots |
ODS 模板 |
csv |
.csv |
逗号分隔文本表格 |
tsv |
.tsv |
制表符分隔 |
html |
.html |
网页表格 |
pdf |
.pdf |
表格导出 PDF |
fods |
.fods |
扁平 XML 表格 |
Impress(PPT 演示)
| 格式名 | 输出文件 | 说明 |
|---|---|---|
pptx |
.pptx |
PowerPoint2007+ |
ppt |
.ppt |
PowerPoint97‑2003 |
odp |
.odp |
LibreOffice 原生演示 |
otp |
.otp |
ODP 模板 |
pdf |
.pdf |
PPT 转 PDF |
html |
.html |
网页演示 |
fodp |
.fodp |
扁平 XML 演示稿 |
通用输出
pdf:所有文档类型都可以导出 PDF(最常用)epub:电子书(部分版本需要扩展,兼容性一般)
高级语法:指定筛选器 + 参数
格式还可以加筛选器与编码参数,格式:格式:筛选器名:参数LibreOffic... 示例 1:txt 导出 UTF‑8 编码
soffice.exe --headless --convert-to "txt:Text (encoded):UTF8" test.doc --outdir d:\out
示例 2:pdf 导出(显式指定 pdf 过滤器)
soffice.exe --headless --convert-to "pdf:writer_pdf_Export" test.docx
⚠️重要限制
- 不能导出宏:xls/doc 里 VBA 宏转换后全部丢失
- 不能导入 PDF 做编辑,只能把别的文档导出成 PDF;PDF 作为输入解析效果很差
- 复杂排版、特殊控件转换后可能轻微错位,转换后务必校验
- 转换前关闭所有 LibreOffice 窗口,否则容易生成空文件
实现文件夹下所有目录。
第一步 ,安装转换工具: LibreOffice
1、下载地址 : https://zh-cn.libreoffice.org
2、记录安装位置
第二步,创建批量转换BAT
1、编辑BAT,粘贴后面内容
2、编辑安装目录 :C:\Program Files\LibreOffice\program
3、保存在需要执行的目录中
4、执行文件,即可转换所有文件
5、生成的log2files.txt为转换文件记录
附:BAT文件内容,只是示例
1、vsd 转 pdf
@echo off
set srcext=vsd
set dstext=pdf
set dofile=C:\Program Files\LibreOffice\program\soffice.exe
rem 提示:以后内容不要修改
set mdir=%cd%
set logfile=%cd%\log2%dstext:~1,-1%.txt
echo start %srcext% to %dstext% >"%logfile%"
for /R "." %%i in (*.%srcext%) do (
cd %%~dpi
if %%~xi==.%srcext% (
echo "%dofile%" --headless --convert-to %dstext% "%%i" >>%logfile%
"%dofile%" --headless --convert-to %dstext% "%%i" >>%logfile%
)
)
cd %mdir%
2、doc 转 docs
@echo off
set srcext=doc
set dstext=dosx
set dofile=C:\Program Files\LibreOffice\program\soffice.exe
rem 提示:以后内容不要修改
set mdir=%cd%
set logfile=%cd%\log2%dstext:~1,-1%.txt
echo start %srcext% to %dstext% >"%logfile%"
for /R "." %%i in (*.%srcext%) do (
cd %%~dpi
if %%~xi==.%srcext% (
echo "%dofile%" --headless --convert-to %dstext% "%%i" >>%logfile%
"%dofile%" --headless --convert-to %dstext% "%%i" >>%logfile%
)
)
cd %mdir%
3、xls 转 xlsx
@echo off
set srcext=xls
set dstext=xlsx
set dofile=C:\Program Files\LibreOffice\program\soffice.exe
rem 提示:以后内容不要修改
set mdir=%cd%
set logfile=%cd%\log2%dstext:~1,-1%.txt
echo start %srcext% to %dstext% >"%logfile%"
for /R "." %%i in (*.%srcext%) do (
cd %%~dpi
if %%~xi==.%srcext% (
echo "%dofile%" --headless --convert-to %dstext% "%%i" >>%logfile%
"%dofile%" --headless --convert-to %dstext% "%%i" >>%logfile%
)
)
cd %mdir%
欢迎好评!

浙公网安备 33010602011771号