官方文档:https://python-docx.readthedocs.io/en/latest/index.html
中文翻译文档https://www.zybuluo.com/belia/note/1303813
可以用dir或help来查看具体的方法使用。
它也只能解析docx文件,解析不了doc文件。在加载doc文件时,会出现问题,建议先将doc文件批量转换为docx文件,例如利用工具doc2doc:http://www.batchwork.com/en/doc2doc/。
安装方式直接pip,pip工具在python安装路径下的Scripts文件夹中
pip install python-docx
pip3 install python-docx -i https://pypi.douban.com/simple # 豆瓣镜像下载
当然你也可以选择使用easy_install或者手动方式进行安装,不过不建议下载安装。
在导入模块时,用的是
import docx
Word文档比较复杂,是二进制文件,所以常规的读取文件方法是没用的,所以docx包用不同的文本类型来表示:
l Document对象,最顶层,其代表整个文档
l block-level(块等级) paragraph(段落)是常见的块等级,换行符结尾算一个段落 table(表格)、图片(inline picture)、标题(heading)有序列表(numbered lists)、无序列表(bullets lists)均属于块对象 对于块对象属性,常见有对齐(alignment)、缩进(indent)以及行间距(space)等等
l inline-level(内联等级),其属于块等级中, run是常见的内联等级,一个块对象可由多个run组成,特别是通过run可由设置不同属性样式; 文字、句子、段落均可作为内联对象; 对于内联对象属性,常见有字体、大小、对齐以及颜色等等

l Document对象的paragraphs 属性,是Paragraph对象的列表。
l Paragraph 对象表示word文档中的一个段落。Paragraph对象,有一个 text 属性,包含该段中文本的字符串(没有样式信息)。 Paragraph 对象有一个 runs 属性,它是 Run 对象的列表。具有相同格式的文字组成一个run。如下图中的单句段落有 4 个 Run 对象。

l Run 对象:也有一个 text 属性,包含那个延续中的文本。一个 Run 对象是相同样式文本的延续。当文本样式发生改变时,就需要一个新的 Run 对象。
document = Document() #创建基于默认“模板”的空白文档
document.styles[‘Normal’].font.name = u’字体名’
document.styles[‘Normal’]._element.rpr.rFonts.set(qn(“w:eastAsia”), u”字体名”)
doc = docx.Document('demo.docx') # 打开当前目录下的文档
doc = docx.Document('../dir/demo.docx') # 打开指定目录下的文档
属性 说明
Paragraphs属性 返回段落的列表
tables 返回表格的列表
sections 返回节的列表
styles 返回样式的列表
inline_shapes 返回图像的列表
方法 说明
add_heading() 方法: 插入标题。其中参数level是标题等级,0表示一级标题,1表示二级标题,以此类推。
add_paragraph()方法: 在尾部插入段落,参数style是样式,默认不应用样式。将一段新文本添加到文档中,并返回添加的 Paragraph 对象的引用。第二个参数表示 Paragraph对象样式的字符串。例如:doc.add_paragraph('Hello world!', 'Title') 添加了一段,文本是 Hello world!,样式是 Title。
insert_paragraph_before()方法: 在某段落前插入一个段落。prior_paragraph = paragraph.insert_paragraph_before('这是前面的段落。')
add_picture()方法: 用来插入图片。Doc.add_picture(‘文件名’, width=Cm(5), height=Cm(5)
add_table()方法: 插入表格等。
add_page_break(): 添加一个分页
save('文件名')方法: 保存文档-覆盖原文档
从 http://nostarch.com/automatestuff/下载demo.docx,并将它保存在当前工作目录中。然后在交互式环境中输入以下代码:
>>> import docx
>>> doc = docx.Document('demo.docx')
>>> len(doc.paragraphs)
7 #该文档有 7 个 Paragraph 对象
>>> doc.paragraphs[0].text
'Document Title' #该段中文本的字符串(没有样式信息)
>>> doc.paragraphs[1].text
'A plain paragraph with some bold and some italic'
>>> len(doc.paragraphs[1].runs)
4 # 段落有4 个Run 对象
>>> doc.paragraphs[1].runs[0].text
'A plain paragraph with some '
>>> doc.paragraphs[1].runs[1].text
'bold'
>>> doc.paragraphs[1].runs[2].text
>>> doc.paragraphs[1].runs[3].text
'italic'
例子2:从.docx 文件中取得完整的文本。只关心 Word 文档中的文本,不关心样式信息。
#! python3
import docx
def getText(filename):
doc = docx.Document(filename)
fullText = []
for para in doc.paragraphs:
fullText.append(para.text)
return '\n'.join(fullText)
例子:读取word中的文本
def gettxt():
file=docx.Document("gao.docx")
print("段落数:"+str(len(file.paragraphs))) # “段落数为13“
#输出段落编号及段落内容
for i in range(len(file.paragraphs)):
if len(file.paragraphs[i].text.replace(‘ ‘,‘‘))>4:
print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)
添加段落
在交互式环境中输入以下代码:
>>> import docx
>>> doc = docx.Document()
>>> doc.add_paragraph('Hello world!')
<docx.text.Paragraph object at 0x0000000003B56F60>
>>> doc.save('helloworld.docx')
添加文本
调用 Paragraph 对象的 add_run()方法,向它传入一个字符串。
在交互式环境中输入以下代码:
>>> import docx
>>> doc = docx.Document()
>>> doc.add_paragraph('Hello world!')
<docx.text.Paragraph object at 0x000000000366AD30>
>>> paraObj1 = doc.add_paragraph('This is a second paragraph.')
>>> paraObj2 = doc.add_paragraph('This is a yet another paragraph.')
>>> paraObj1.add_run(' This text is being added to the second paragraph.')
<docx.text.Run object at 0x0000000003A2C860>
>>> doc.save('multipleParagraphs.docx')
得到的文本如图13-9 所示。请注意,文本This text is being added to the second paragraph.被添加到 paraObj1 中的 Paragraph 对象中,它是添加到 doc 中的第二段。

要记住,对于 python-docx 的 0.5.3 版本,新的 Paragraph 对象只能添加在文档的末尾,新的 Run 对象只能添加在 Paragraph 对象的末尾。