请问有没有什么办法能批量把 docx 格式转成 doc 格式 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lllsj
V2EX    程序员

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

  •  
  •   lllsj 119 天前 3211 次点击
    这是一个创建于 119 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最进手头有一些文档需要进行格式转换,希望最好有免费批量一键转换的方法,看了市面上的 API 基本都是国外且收费的,感觉付费不是很方便,所以想先问一下各位大佬有没有什么好点的解决方案。
    21 条回复    2025-06-16 09:52:17 +08:00
    TaurusXin
        1
    TaurusXin  
       119 天前 via iPhone
    Leibniz007
        2
    Leibniz007  
       119 天前   1
    libreoffice 可以,有 cli ,配合 find 或者 ls 管道跑就行
    liangdi
        3
    liangdi  
       119 天前
    安装 libreoffice
    参考命令, 我本机测试 ok
    ```bash
    libreoffice --headless --convert-to doc --outdir ./out *.docx
    ```
    lllsj
        4
    lllsj  
    OP
       119 天前
    @liangdi #3 好的,感谢,我试试
    lllsj
        5
    lllsj  
    OP
       119 天前
    @Leibniz007 #2 嗯嗯,我试一下
    lllsj
        6
    lllsj  
    OP
       119 天前
    @xinge666 #1 我这边还是尽量想通过本地的服务去进行转换,后面想写个脚本什么的,使用这个网站也只能手动批量去选择吧
    ysc3839
        7
    ysc3839  
       119 天前 via Android
    Windows 下可以调用 Office 另存为,WPS 估计也行。其他系统比较尴尬。
    lllsj
        8
    lllsj  
    OP
       119 天前
    @ysc3839 #7 是的,我用的 mac ,这上面的 office 就很蹩脚,而且我需要批量的转换,好像 office 不支持批量的
    ysc3839
        9
    ysc3839  
       119 天前 via Android
    @lllsj macOS 可以试试用 Apple Script 控制 Office 转换
    lllsj
        10
    lllsj  
    OP
       119 天前
    @ysc3839 #9 好的,我看看
    xyooyx
        11
    xyooyx  
       119 天前
    java 可以用 poi 库进行转换
    yanqiyu
        12
    yanqiyu  
       119 天前
    windows 上 word 的大部分功能应该可以用 PowerShell 操作,写个脚本调用 headless 的 word 来打开文档并另存为就可以了。

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

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

    只有编程去调用才能实现完全功能
    beiji2027
        19
    beiji2027  
       118 天前
    pandoc ?自动转的都不靠谱。要么就用 docx ;要么用 Office 转存最靠谱。
    img src="https://cdn.v2ex.com/avatar/aad3/7b2a/576947_normal.png?m=1754379724" class="avatar" border="0" align="default" alt="kenyons" data-uid="576947" />
        20
    kenyons  
       117 天前
    Office Tool Plus 似乎可以?
    lllsj
        21
    lllsj  
    OP
       117 天前
    @beiji2027 是的,这几天经过测试还是得通过 word 转换格式出问题的概率最小
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2178 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:27 PVG 08:27 LAX 17:27 JFK 20:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86