请问有没有什么办法能批量把 docx 格式转成 doc 格式

2025 年 6 月 14 日
 lllsj
最进手头有一些文档需要进行格式转换,希望最好有免费批量一键转换的方法,看了市面上的 API 基本都是国外且收费的,感觉付费不是很方便,所以想先问一下各位大佬有没有什么好点的解决方案。
3872 次点击
所在节点    程序员
21 条回复
TaurusXin
2025 年 6 月 14 日
Leibniz007
2025 年 6 月 14 日
libreoffice 可以,有 cli ,配合 find 或者 ls 管道跑就行
liangdi
2025 年 6 月 14 日
安装 libreoffice
参考命令, 我本机测试 ok
```bash
libreoffice --headless --convert-to doc --outdir ./out *.docx
```
lllsj
2025 年 6 月 14 日
@liangdi #3 好的,感谢,我试试
lllsj
2025 年 6 月 14 日
@Leibniz007 #2 嗯嗯,我试一下
lllsj
2025 年 6 月 14 日
@xinge666 #1 我这边还是尽量想通过本地的服务去进行转换,后面想写个脚本什么的,使用这个网站也只能手动批量去选择吧😂
ysc3839
2025 年 6 月 14 日
Windows 下可以调用 Office 另存为,WPS 估计也行。其他系统比较尴尬。
lllsj
2025 年 6 月 14 日
@ysc3839 #7 是的,我用的 mac ,这上面的 office 就很蹩脚,而且我需要批量的转换,好像 office 不支持批量的
ysc3839
2025 年 6 月 14 日
@lllsj macOS 可以试试用 Apple Script 控制 Office 转换
lllsj
2025 年 6 月 14 日
@ysc3839 #9 好的,我看看
xyooyx
2025 年 6 月 14 日
java 可以用 poi 库进行转换
yanqiyu
2025 年 6 月 14 日
windows 上 word 的大部分功能应该可以用 PowerShell 操作,写个脚本调用 headless 的 word 来打开文档并另存为就可以了。

这一点上 PowerShell 的面向对象特征让它行为特别像正儿八经的编程语言,不得不说虽然语法难看但是确实炫酷
kkocdko
2025 年 6 月 14 日
用自带的 VBA 转。最好是用 MS Office ,用别的可能会出现细微的格式变动问题。虽然这个格式变动谁都没法保证,但是 MS Office 自己给自己转应该是最稳定的了。

见我的博客 : https://kkocdko.site/post/201806261915 。按照代码里的注释替换一下就行,例如输入改成 docx ,输出改成 0 ( doc )这样。
fyq
2025 年 6 月 14 日
楼上正解,让 AI 给你写一个 VBA 脚本,执行就行
evejwp
2025 年 6 月 14 日
windows 下可以用脚本。
zqqian
2025 年 6 月 14 日
50 块钱雇个大学生用 word 一个一个另存为 doc
natsukage
2025 年 6 月 15 日
```python
import os
import win32com.client

def batch_convert_docx_to_doc(folder_path):
"""
批量将文件夹中的 .docx 文件转换为 .doc 格式

参数:
folder_path (str): 包含 .docx 文件的文件夹路径
"""
# 启动 Word 应用程序
print("正在启动 Word 应用程序...")
word_app = win32com.client.Dispatch("Word.Application")
word_app.Visible = False # 后台运行,不显示界面

try:
# 获取文件夹中的所有文件
files = os.listdir(folder_path)
docx_files = [f for f in files if f.lower().endswith('.docx')]

if not docx_files:
print("未找到需要转换的 .docx 文件")
return

print(f"找到 {len(docx_files)} 个 .docx 文件,开始转换...")

# 逐个转换文件
for filename in docx_files:
# 构建完整路径
docx_path = os.path.join(folder_path, filename)
doc_path = os.path.join(folder_path, filename[:-5] + ".doc")

# 检查目标文件是否已存在
if os.path.exists(doc_path):
print(f"跳过 {filename}(目标文件已存在)")
continue

try:
# 打开 .docx 文件
document = word_app.Documents.Open(docx_path)

# 保存为 .doc 格式( FileFormat=0 表示 Word 97-2003 文档格式)
document.SaveAs(doc_path, FileFormat=0)

# 关闭文档
document.Close()

print(f"✅ 转换完成: {filename} → {os.path.basename(doc_path)}")

except Exception as e:
print(f"❌ 转换失败: {filename} - {str(e)}")

finally:
# 确保关闭 Word 应用程序
word_app.Quit()
print("Word 应用程序已关闭")

def main():
"""主函数"""
# 设置要处理的文件夹路径
target_folder = os.path.join(os.getcwd(), "organized_files")

# 检查文件夹是否存在
if not os.path.exists(target_folder):
print(f"错误:文件夹 '{target_folder}' 不存在")
return

print(f"开始处理文件夹: {target_folder}")

# 执行批量转换
batch_convert_docx_to_doc(target_folder)

print("批量转换完成!")

if __name__ == "__main__":
main()
```

大概这种感觉吧(随便写的,有点丑陋,我让 cursor 给加了注释,不过核心思路应该很简单)
就是调用本地安装的 microsoft word 进行处理。
realpg
2025 年 6 月 15 日
@yanqiyu #12
这不是 powershell 的能力
因为吧 其实说出来难以置信 office 从 98 版本开始 就是完全的 com 组件的核心
你用的 office 只是个 gui 它甚至未完全实现 office 组件的全部功能
office 要发挥 100%功能甚至必须自己编程去调用那些 office gui 未实现的功能...

只有编程去调用才能实现完全功能
beiji2027
2025 年 6 月 15 日
pandoc ?自动转的都不靠谱。要么就用 docx ;要么用 Office 转存最靠谱。
kenyons
2025 年 6 月 16 日
Office Tool Plus 似乎可以?

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

https://v2ex.xtra.eu.org/t/1138561

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

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

© 2021 V2EX