python 操作 MS Word
1 概述

python 为脚本自动化操作 Word 提供了可能。最为常用是 python-docx .使用它可以方便地创建或更新 Microfoft Word(.docx) files.
下图是其官网给出的一个使用 python-docx 创建的 word 文档的 Demo:
文档地址:http://python-docx.readthedocs.io/en/latest/index.html
github: https://github.com/python-openxml/python-docx
这是官网给出的代码:
1 | from docx import Document |
2 安装 python-docx
可以使用 pip 或 easy_install 来进行安装
1 | pip install python-docx |
也可以直接下载安装文件来进行安装:
1 | tar xvzf python-docx-{version}.tar.gz |
要求Python 版本在2.6 以上或 3.3 以上,lxml 版本在 2.3.2及以上。 在 Windows 10 / Python 2.7 环境下安装时出现 lxml3.7.2 安装失败的问题,可降低版本进行尝试:
1 | pip install lxml==3.4.2 |
3 快速上手
3.1 打开文档
1 | from docx import Document |
新建一个空的 word 文档。当然,也可以打开一个已存在的 word 文档,只要传入相应的路径就好。
3.2 添加段落
段落是 Word 的基本单元。使用 python-docx 添加段落:
1 | paragraph = document.add_paragraph(u'段落是 Word 的基本单元。') |
add_paragraph 会在文档末尾创建一个段落,并返回创建的段落的引用。 也可以在文档的某一个位置插入一个新的段落:
1 | prior_paragraph = paragraph.insert_paragraph_before(u'段落是 Word 的') |
3.3 添加标题
1 | document.add_heading(u'使用 python 创建文档') |
可以使用 level 参数为标题指定级别:
1 | document.add_heading(u'添加一个2级标题',level=2) |
level 的范围在 0 到 9 之间。默认为 1 级标题。
3.4 分页标记
1 | document.add_page_break() |
3.5 表格
3.5.1 创建表格
1 | table = document.add_table(rows=2, cols=2) |
使用默认样式在文档末尾创建一个 2 行 2 列的表格。不过默认样式相当不美观,我们可以通过 style 来为其设置样式。
3.5.2 访问单元格
通过 row 或 cell 可以访问单元格
1 | row = table.rows[0] |
3.5.3 添加表格行
1 | row = table.add_row() |
3.6 图片
1 | document.add_picture('image-filename.png') |
可以在文档末尾添加一张图片。路径可以是本地路径或网络路径。默认添加图片的大小为原图片的大小。计算方式为 像素 / dpi .即一张 300*300 像素的图片在300dpi 分辨率下显示为 1 英寸。然后一般的图片是 72 dpi 分辨率的。我们可以直接使用英寸或厘米来指定大小:
1 | from docx.shared import Inches |
3.7 样式
python-docx 的样式分为四种:字段、列表、段落、表格。可以分别为其指定样式。每种样式都有 name,type 等属性。
3.7.1 段落样式
在创建段落的时候可以为其指定样式,也可以在创建段落之后为其指定样式:
1 | document.add_paragraph('Lorem ipsum dolor sit amet.', style='ListBullet') |
这里的 ListBullet 为样式名称。如果你使用的 Word 是英文版 ,直接从 UI 上获取名称即可。如果是其它语言版本,则无法直接从 UI 上获取了。 为方便选择样式,这里将提供一个文档,列出各种样式对应的英文名称,详见本文附件。
3.7.2 字体样式
段落样式将格式化段落块。而字体样式将直接格式化指定的字块。 在使用 add_paragraph() 添加段落后,可以使用 add_run() 在段落末尾添加文字。
1 | paragraph = document.add_paragraph('Lorem ipsum ') |
add_run 返回 run 对象,该对象包括 .blod 和 .italic 属性。
1 | paragraph = document.add_paragraph('Lorem ipsum ') |
该段代码将得到如下的样式: Lorem ipsum dolor sit amet.
也可以像下面这样简写:
1 | paragraph.add_run('dolor').bold = True |
除了这两个属性,还可以为 run 指定 Style:
1 | paragraph = document.add_paragraph('Normal text, ') |
或
1 | paragraph = document.add_paragraph('Normal text, ') |
3.7.3 表格样式
和段落和字体一样,可以为表格设置样式 。详见本文附件。
3.7.4 列表样式
同上,详见本文附件。
4.附件
为方便地查找各种样式,这里使用了docx自带的样式生成了一份文档,用于速查:
[

](https://code.wandoer.com/wp-content/uploads/2017/01/python_docxs_tyles.png)