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

 

⚠️重要限制

  1. 不能导出宏:xls/doc 里 VBA 宏转换后全部丢失
  2. 不能导入 PDF 做编辑,只能把别的文档导出成 PDF;PDF 作为输入解析效果很差
  3. 复杂排版、特殊控件转换后可能轻微错位,转换后务必校验
  4. 转换前关闭所有 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%

 

posted @ 2026-06-07 11:26  冬至小孩  阅读(67)  评论(0)    收藏  举报