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

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

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

见我的博客 : https://kkocdko.site/post/201806261915 。按照代码里的注释替换一下就行,例如输入改成 docx ,输出改成 0 ( doc )这样。
fyq
89 天前
楼上正解,让 AI 给你写一个 VBA 脚本,执行就行
evejwp
89 天前
windows 下可以用脚本。
zqqian
89 天前
50 块钱雇个大学生用 word 一个一个另存为 doc
natsukage
89 天前
```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
88 天前
@yanqiyu #12
这不是 powershell 的能力
因为吧 其实说出来难以置信 office 从 98 版本开始 就是完全的 com 组件的核心
你用的 office 只是个 gui 它甚至未完全实现 office 组件的全部功能
office 要发挥 100%功能甚至必须自己编程去调用那些 office gui 未实现的功能...

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

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

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

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

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

© 2021 V2EX