使用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-11-11
  • PyQt6+pyqtgraph折线图绘制显示功能

    PyQt6+pyqtgraph折线图绘制显示功能

    文章介绍了如何在PyQt6中使用pyqtgraph库绘制和显示折线图,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Python报错之如何解决matplotlib绘图中文显示成框框问题

    Python报错之如何解决matplotlib绘图中文显示成框框问题

    这篇文章主要介绍了Python报错之如何解决matplotlib绘图中文显示成框框问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python Sweetviz轻松实现探索性数据分析

    Python Sweetviz轻松实现探索性数据分析

    Sweetviz是一个开放源代码Python库,可生成精美的高密度可视化文件,以单行代码启动EDA(探索性数据分析)。输出是一个完全独立的HTML应用程序,该系统围绕快速可视化目标值和比较数据集而构建。其目标是帮助快速分析目标特征,训练与测试数据以及其他此类数据表征任务
    2021-11-11
  • python入门课程第三讲之编码规范知多少

    python入门课程第三讲之编码规范知多少

    这篇文章主要介绍了python入门课程第三讲之编码规范知多少,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • python使用matplotlib画出的图怎样放到word中

    python使用matplotlib画出的图怎样放到word中

    这篇文章主要介绍了python使用matplotlib画出的图怎样放到word中问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python利用pytest和selenium实现自动化测试完整指南

    Python利用pytest和selenium实现自动化测试完整指南

    自动化测试是现代软件开发中不可或缺的一环,Python作为一门简洁优雅的编程语言,配合pytest测试框架和selenium自动化工具,为我们提供了强大的自动化测试解决方案,下面小编就来和大家简单介绍一下吧
    2025-08-08
  • python基于plotly实现画饼状图代码实例

    python基于plotly实现画饼状图代码实例

    这篇文章主要介绍了python基于plotly实现画饼状图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • python利用os模块编写文件复制功能——copy()函数用法

    python利用os模块编写文件复制功能——copy()函数用法

    这篇文章主要介绍了python利用os模块编写文件复制功能——copy()函数用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 解决Jupyter NoteBook输出的图表太小看不清问题

    解决Jupyter NoteBook输出的图表太小看不清问题

    这篇文章主要介绍了解决Jupyter NoteBook输出的图表太小看不清问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论