使用python-docx和win32com库实现批量转换doc文件为docx文件

 更新时间:2025年12月18日 09:43:23   作者:睿思达DBA_WGX  
这篇文章主要为大家详细介绍了使用python-docx和win32com库实现批量转换doc文件为docx文件的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

一、安装 python-docx 和 win32com 库

windows命令行窗口执行如下代码:

pip install python-docx
pip install pywin32 

C:\Users\wgx58>pip install python-docx
Collecting python-docx
  Using cached python_docx-1.2.0-py3-none-any.whl.metadata (2.0 kB)
Requirement already satisfied: lxml>=3.1.0 in c:\python\lib\site-packages (from python-docx) (6.0.2)
Requirement already satisfied: typing_extensions>=4.9.0 in c:\python\lib\site-packages (from python-docx) (4.15.0)
Using cached python_docx-1.2.0-py3-none-any.whl (252 kB)
Installing collected packages: python-docx
Successfully installed python-docx-1.2.0

C:\Users\wgx58>pip install pywin32
Collecting pywin32
  Downloading pywin32-311-cp313-cp313-win_amd64.whl.metadata (10 kB)
Downloading pywin32-311-cp313-cp313-win_amd64.whl (9.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5/9.5 MB 12.7 kB/s  0:09:26
Installing collected packages: pywin32
Successfully installed pywin32-311

二、编写如下程序代码

import os
import glob
from win32com import client as wc
from docx import Document
import pythoncom

def doc_to_docx(input_path, output_path):
    """
    将单个doc文件转换为docx文件
    """
    try:
        # 初始化COM组件(单线程)
        pythoncom.CoInitialize()
        
        # 创建Word应用程序对象
        word = wc.Dispatch("Word.Application")
        word.Visible = False  # 不显示Word界面
        
        # 打开doc文件
        doc = word.Documents.Open(input_path)
        
        # 保存为docx格式
        doc.SaveAs(output_path, 16)  # 16表示docx格式
        
        # 关闭文档和Word应用程序
        doc.Close()
        word.Quit()
        
        print(f"成功转换: {input_path} -> {output_path}")
        return True
        
    except Exception as e:
        print(f"转换失败 {input_path}: {str(e)}")
        return False
    finally:
        # 释放COM组件
        pythoncom.CoUninitialize()

def batch_doc_to_docx(input_folder, output_folder=None):
    """
    批量转换文件夹中的所有doc文件为docx格式
    
    Args:
        input_folder: 输入文件夹路径
        output_folder: 输出文件夹路径,如果为None则使用输入文件夹
    """
    if output_folder is None:
        output_folder = input_folder
    
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 查找所有doc文件
    doc_files = glob.glob(os.path.join(input_folder, "*.doc"))
    
    if not doc_files:
        print(f"在文件夹 {input_folder} 中未找到任何doc文件")
        return
    
    print(f"找到 {len(doc_files)} 个doc文件,开始转换...")
    
    success_count = 0
    failed_files = []
    
    for doc_file in doc_files:
        # 生成输出文件路径
        filename = os.path.basename(doc_file)
        docx_filename = os.path.splitext(filename)[0] + ".docx"
        output_path = os.path.join(output_folder, docx_filename)
        
        # 转换文件
        if doc_to_docx(doc_file, output_path):
            success_count += 1
        else:
            failed_files.append(doc_file)
    
    # 输出转换结果
    print(f"\n转换完成!")
    print(f"成功: {success_count}/{len(doc_files)}")
    
    if failed_files:
        print(f"失败的文件:")
        for file in failed_files:
            print(f"  - {file}")

def main():
    """
    主函数,提供用户交互界面
    """
    print("=== DOC 转 DOCX 批量转换工具 ===")
    
    # 获取输入文件夹
    input_folder = input("请输入包含doc文件的文件夹路径: ").strip()
    
    if not os.path.exists(input_folder):
        print("错误:指定的文件夹不存在!")
        return
    
    # 询问输出文件夹
    use_same_folder = input("是否将docx文件保存在同一文件夹?(y/n): ").strip().lower()
    
    if use_same_folder == 'y':
        output_folder = input_folder
    else:
        output_folder = input("请输入输出文件夹路径: ").strip()
    
    # 开始转换
    batch_doc_to_docx(input_folder, output_folder)

if __name__ == "__main__":
    main()

三、测试程序

程序运行结果如下:

C:\python\python.exe C:\Users\wgx58\PycharmProjects\PythonProject1\hello.py 
=== DOC 转 DOCX 批量转换工具 ===
请输入包含doc文件的文件夹路径: D:\python_wgx\word_doc
是否将docx文件保存在同一文件夹?(y/n): n
请输入输出文件夹路径: D:\python_wgx\word_docx
找到 1 个doc文件,开始转换...
成功转换: D:\python_wgx\word_doc\aa.doc -> D:\python_wgx\word_docx\aa.docx

转换完成!
成功: 1/1

进程已结束,退出代码为 0

到此这篇关于使用python-docx和win32com库实现批量转换doc文件为docx文件的文章就介绍到这了,更多相关python-docx win32com转换doc为docx内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 编写python代码实现简单抽奖器

    编写python代码实现简单抽奖器

    这篇文章主要介绍了编写python代码实现简单抽奖器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python自动化测试笔试面试题精选

    Python自动化测试笔试面试题精选

    在本篇文章里小编给大家整理的是一篇关于Python自动化测试笔试面试时常见的编程题,需要的朋友们可以学习参考下。
    2020-03-03
  • Python OpenCV形态学运算示例详解

    Python OpenCV形态学运算示例详解

    这篇文章主要为大家介绍了OpenCV中的几个形态学运算,例如:腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算,感兴趣的可以了解一下
    2022-04-04
  • python开发中module模块用法实例分析

    python开发中module模块用法实例分析

    这篇文章主要介绍了python开发中module模块用法,以实例形式较为详细的分析了Python中模块的功能、定义及相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 利用Python实现批量下载上市公司财务报表

    利用Python实现批量下载上市公司财务报表

    这篇文章主要为大家介绍了如何利用Python做个小工具,可以批量把某网站上的上市公司的财报下下来。文中的示例代码讲解详细,感兴趣的可以动手试一试
    2022-03-03
  • Python散列表(Hash Table)的实现示例

    Python散列表(Hash Table)的实现示例

    散列表是一种常用于实现关联数组或映射的数据结构,本文我们将深入讲解Python中的散列表,包括散列函数、冲突解决方法、散列表的实现和应用场景,感兴趣的可以了解一下
    2024-01-01
  • OpenCV读取中文路径图像失败的问题解决方法总结

    OpenCV读取中文路径图像失败的问题解决方法总结

    这篇文章主要为大家详细介绍了OpenCV读取中文路径图像失败的问题的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践
    2026-05-05
  • TensorFlow实现卷积神经网络CNN

    TensorFlow实现卷积神经网络CNN

    这篇文章主要为大家详细介绍了TensorFlow实现卷积神经网络CNN,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python设置和解除Word文档保护的实现步骤

    Python设置和解除Word文档保护的实现步骤

    在日常工作和学习中,我们经常需要使用Word文档来记录和分享重要的信息,为了确保文档内容的安全性和完整性,了解如何保护和取消保护Word文档显得尤为重要,这篇博客将详细介绍如何使用Python设置和解除Word文档的保护,需要的朋友可以参考下
    2025-02-02
  • 浅析Python pickle 包的理解和使用

    浅析Python pickle 包的理解和使用

    pickle 是 Python 库中的一个模块,用于将 Python 对象序列化和反序列化,这篇文章主要介绍了Python pickle 包的理解和使用,需要的朋友可以参考下
    2023-05-05

最新评论