小沐:戈戈,我最近接了个任务,需要批量生成一些Word报告,头疼死了。
戈戈:你说的是自动化生成文档吧?Python有很多库可以处理这个。
小沐:真的吗?我只知道一点python-docx,还有其他选择吗?
戈戈:当然有了,不同场景用不同的库效果才最好。让我给你梳理一下。
小沐:太好了,那我可得好好学学,以后就不用手工一个个改了。
Python Word操作库完全指南
在日常办公中,Word文档处理是很多小伙伴的"噩梦"。手工修改格式、批量替换内容、生成模板报告...这些重复性工作既耗时又容易出错。其实,Python生态为我们提供了丰富的Word操作库,能够轻松实现文档的创建、修改、模板生成、格式转换等功能。今天,就让戈戈带大家全面了解一下这些强大的工具库!
一、python-docx:Word文档处理的基础利器
1.1 功能介绍
python-docx 是Python操作Word文档最基础也是最常用的库。它可以创建新的Word文档、读取现有文档、添加或修改文本、段落、表格、图片等内容,支持设置字体、颜色、对齐方式等基本格式。
1.2 安装方法
1.3 使用方法
python-docx的使用非常直观。首先需要导入Document类,然后创建文档对象,接着添加各种内容元素。
1.4 示例代码
# 导入python-docx库from docx import Documentfrom docx.shared import Inches, Pt, RGBColorfrom docx.enum.text import WD_ALIGN_PARAGRAPH# 创建一个新的Word文档doc = Document()# 添加标题title = doc.add_heading('Python操作Word文档示例', level=0)title.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中显示# 添加段落paragraph = doc.add_paragraph('这是第一个段落,展示了python-docx的基本用法。')paragraph_format = paragraph.paragraph_formatparagraph_format.first_line_indent = Inches(0.5) # 首行缩进# 添加带格式的段落run = doc.add_paragraph().add_run('这是加粗红色的文字,爱阅读的小沐')run.bold = Truerun.font.size = Pt(14)run.font.color.rgb = RGBColor(255, 0, 0)# 添加分页符doc.add_page_break()# 添加子标题doc.add_heading('第二部分:表格操作', level=1)# 添加表格table = doc.add_table(rows=3, cols=3)table.style = 'Light Grid Accent 1' # 设置表格样式# 填充表格数据headers = ['姓名', '年龄', '城市']for i, header in enumerate(headers): table.rows[0].cells[i].text = headerdata = [ ['张三', '28', '北京'], ['李四', '32', '上海']]for row_idx, row_data in enumerate(data, start=1): for col_idx, cell_data in enumerate(row_data): table.rows[row_idx].cells[col_idx].text = cell_data# 保存文档doc.save('example.docx')print('文档创建成功!')
代码运行结果如下:


二、docxtpl:模板引擎的高效之选
2.1 功能介绍
docxtpl 是一个基于python-docx的模板引擎库。它允许你使用Jinja2模板语法来生成Word文档,特别适合需要批量生成格式一致但内容不同的报告、证书、邀请函等场景。只需制作一次模板,之后替换变量即可自动生成文档,效率极高。
2.2 安装方法
2.3 使用方法
docxtpl的工作流程是:先制作一个包含占位符的Word模板,然后使用字典数据渲染模板,最后保存为新文档。
2.4 示例代码
# 测试docxtplfrom docxtpl import DocxTemplatefrom datetime import datetimeimport osprint("开始测试docxtpl...")# 加载模板文档doc = DocxTemplate("template2.docx")# 准备渲染数据context = { 'title': '员工信息登记表', 'date': datetime.now().strftime('%Y年%m月%d日'), 'company': '科技创新有限公司', 'employees': [ {'name': '小沐', 'department': '技术部', 'position': 'Python开发工程师'}, {'name': '李小红', 'department': '产品部', 'position': '产品经理'}, {'name': '张小华', 'department': '设计部', 'position': 'UI设计师'} ], 'total': 3}# 渲染模板doc.render(context)# 保存生成的新文档output_filename = f"员工信息_{datetime.now().strftime('%Y%m%d')}.docx"doc.save(output_filename)print(f'文档生成成功:{output_filename}')print(f'文件是否存在:{os.path.exists(output_filename)}')
代码运行结果如下:

模板文件生成如下:
基于上面的模板文件填充如下:
三、pypandoc:文档格式转换的桥梁
3.1 功能介绍
pypandoc 是一个文档格式转换库,它是对Pandoc的Python包装。Pandoc是一个强大的文档转换器,支持Markdown、HTML、LaTeX、Word等多种格式的互转。使用pypandodc,你可以轻松将Markdown文件转换为Word,也可以将Word转换为其他格式。
3.2 安装方法
需要注意的是,pypandoc还需要系统中安装Pandoc程序。安装完成后,pypandoc会自动下载Pandoc。 https://github.com/jgm/pandoc/releases/tag/3.9

3.3 使用方法
pypandoc的使用非常简单,主要通过convert_file和convert_text两个函数进行格式转换。
3.4 示例代码
import pypandoc# 将Markdown文件转换为Word# 确保同级目录下有一个 test.md 文件try: # 方法1:文件到文件的转换 output = pypandoc.convert_file( source_file='test.md', to='docx', outputfile='output.docx', extra_args=['--standalone'] # 生成独立文档 ) print('Markdown转Word成功!')except FileNotFoundError: print('请确保 test.md 文件存在,或先创建一个Markdown文件')except Exception as e: print(f'转换过程中出现错误:{e}')
准备的test.md文件如下:
代码运行结果如下:
转换成功的word文件如下:
image四、pywin32:Windows原生的深度集成
4.1 功能介绍
pywin32 是Python访问Windows API的扩展库,通过它可以使用COM接口直接操作Microsoft Word应用程序。这种方式能够实现最完整的Word功能,包括一些只有通过Word应用程序才能完成的操作,如宏脚本执行、修订模式、精确的页面布局控制等。
4.2 安装方法
4.3 使用方法
pywin32需要Windows系统和安装Microsoft Word。它通过COM接口与Word应用程序通信,所以使用完毕后需要正确释放资源。
4.4 示例代码
import win32com.clientimport osfrom pathlib import Pathdef create_word_document_with_com(): """使用pywin32创建Word文档(需要Windows系统)""" try: # 创建Word应用程序对象 word_app = win32com.client.Dispatch("Word.Application") word_app.Visible = False # 不显示Word窗口 # 创建新文档 doc = word_app.Documents.Add() # 添加标题 selection = word_app.Selection selection.Font.Size = 16 selection.Font.Bold = True selection.TypeText("使用pywin32生成的Word文档\n\n") # 添加正文 selection.Font.Size = 12 selection.Font.Bold = False content = """小沐总结如下:这是通过Python的pywin32库调用Microsoft Word COM接口生成的文档。pywin32可以实现:1. 完整的Word功能支持2. 宏脚本执行3. 精确的格式控制4. 与Word模板深度集成 """ selection.TypeText(content) # 添加表格 table = doc.Tables.Add(selection.Range, 3, 2) table.Cell(1, 1).Range.Text = "产品" table.Cell(1, 2).Range.Text = "销量" table.Cell(2, 1).Range.Text = "产品A" table.Cell(2, 2).Range.Text = "1000" table.Cell(3, 1).Range.Text = "产品B" table.Cell(3, 2).Range.Text = "800" # 保存文档 output_path = os.path.abspath("com_output.docx") doc.SaveAs(output_path) # 关闭文档和Word应用程序 doc.Close() word_app.Quit() print(f'文档创建成功:{output_path}') except Exception as e: print(f'创建文档时出错:{e}') print('请确保已安装Microsoft Word并赋予Python相应权限')# 注意:此代码需要在Windows系统上运行,且已安装Microsoft Officeif __name__ == "__main__": # 先检查是否为Windows系统 import platform if platform.system() == "Windows": create_word_document_with_com() else: print('pywin32仅支持Windows系统')
代码运行结果如下:


五、综合对比
通过对以上几个库的了解相信大家已经对Python操作Word的工具有了整体认识。下面用一张表格来总结各个库的特点和适用场景:
小沐:戈戈,听完你的介绍,我对Python操作Word的库有了全面的了解!
戈戈:没错,不同的库适合不同的场景。掌握这些工具后,批量生成报告、自动填写模板这些工作都能轻松搞定。
小沐:以后加班修改文档的苦日子终于到头了,感谢戈戈!
戈戈:赶紧回去试试吧,有问题随时来找我!
结语
如果您觉得这些文字有一点点用处,请给作者点个赞或关个注;╮( ̄▽ ̄)╭
如果您有技术问题探讨,评论处留言。//(ㄒoㄒ)//
谢谢各位童鞋们啦( ´ ▽ ` )ノ ( ´ ▽ `` )っ!
更多精彩文章详见:
CSDN博客:爱看书的小沐