Python-docx是专门针对于word文档的一个模块,只能操作docx 不能读取doc文件。在这里python-docx主要的功能是对docx文件进行操作,管理等。
官方文档:https://python-docx.readthedocs.io/en/latest/index.html
pip install python-docx
导入Document模块
从 docx模块中,导入Document类,并实例化生成一个Document对象,通过它对word文档进行操作。
from docx import Document
Doc = Document()
添加标题
Doc.add_heading("使用Python操作word文档")
Doc.add_heading("添加标题2",level=2)
Doc.add_heading("添加标题3",level=3)
添加段落(paragraph)
这里paragraph指的就是一个段落的意思
Doc.add_paragraph("Python是一种面向对象的编程语言")
Doc.add_paragraph("Python可以操作word文档")
Doc.add_paragraph("看看操作的结果吧")
插入图片
doc.add_picture('./images/img1.jpg', width=Inches(5),height=Inches(3))
插入表格
# 插入表格
table = doc.add_table(rows=1, cols=3) # 插入表格
table.style ='Table Grid'
#设置列宽
table.cell(0,0).width=Cm(20)
table.cell(0,1).width=Cm(15)
table.cell(0,2).width=Cm(15)
#设置整个表格字体属性
table.style.font.size=Pt(10)
table.style.font.color.rgb=RGBColor(255, 0, 0)
table.style.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
hdr_cells = table.rows[0].cells
#hdr_cells[0].text = '名称'
hdr_cells[1].text = '品牌'
hdr_cells[2].text = '价格'
#单个单元格设置
cell=table.cell(0,0)
p=cell.paragraphs[0]
run = p.add_run("名称")
run.font.color.rgb = RGBColor(0, 0, 255) # 颜色设置,这里是用RGB颜色
run.font.size = Pt(12) # 字体大小设置,和word里面的字号相对应
#设置水平对齐方式(LEFT,RIGHT,CENTER)
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
#设置垂直对齐方式(TOP,BOTTOM,CENTER)
cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
ls = [
["秋梨润肺膏", "同仁堂", "32.00"],
["夏桑菊颗粒", "白云山", "19.90"],
["急支糖浆", "太极", "26.80"],
["虫草清肺胶囊", "同济堂", "88.00"],
["布洛芬缓释胶囊", "芬必得", "30.20"],
["小儿氨酚烷胺颗粒", "葵花药业", "15.20"]
]
for item in ls:
row_cells = table.add_row().cells
row_cells[0].text = item[0]
row_cells[1].text = item[1]
row_cells[2].text = item[2]
边框样式
table_style = 'Normal Table' #无线框表格
单元格对齐
在对单元格对齐方式设置的时候,将单元格视为一个整体,要使用单元格中的垂直对齐(cell.vertical_alignment)和单元格中的段落的对齐(paragraph.alignment)等2种对齐方式配合使用。
在docx.enum.table.WD_ALIGN_VERTICAL定义了TOP、CENTER和BOTTOM等3种类型,含义如下:
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT
WD_CELL_VERTICAL_ALIGNMENT.TOP:单元格内容靠上对齐
WD_CELL_VERTICAL_ALIGNMENT.CENTER:单元格内容居中对齐
WD_CELL_VERTICAL_ALIGNMENT.BOTTOM:单元格内容靠下对齐
在WD_PARAGRAPH_ALIGNMENT中定义了4中类型,分别是LEFT、CENTER、RIGHT和JUSTIFY等4中类型,含义如下:
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 导入段落对齐
WD_PARAGRAPH_ALIGNMENT.LEFT:段落左对齐
WD_PARAGRAPH_ALIGNMENT.CENTER:段落居中对齐
WD_PARAGRAPH_ALIGNMENT.RIGHT:段落右对齐
WD_PARAGRAPH_ALIGNMENT.JUSTIFY:段落两端对齐
合并单元格
cell_1=table.cell(1, 0)
cell_2=table.cell(2, 1)
cell_1.merge(cell_2)
保存word文档
Doc.save("Python_word.docx")
from docx import Document
doc = Document('./data/Python_word.docx')
#输出每一段的内容
for para in doc.paragraphs:
print(para.text)
说明:
doc.paragraphs:获取段落对象列表
如果是想读取其中的图片或是更复杂地编辑,首先需要先来认识下docx文档的格式组成:
docx是Microsoft Office2007之后版本使用的,用新的基于XML的压缩文件格式取代了其专有的默认文件格式,在传统的文件名扩展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。
docx格式的文件本质上是一个ZIP文件。将一个docx文件的后缀改为ZIP后是可以用解压工具打开或是解压的。事实上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。
docx 格式文件的主要内容是保存为XML格式的,但文件并非直接保存于磁盘。它是保存在一个ZIP文件中,然后取扩展名为docx。将.docx 格式的文件后缀改为ZIP后解压, 可以看到解压出来的文件夹中有word这样一个文件夹,它包含了Word文档的大部分内容。而其中的document.xml文件则包含了文档的主要文本内容。
word目录下:
document.xml文件内容:
所以,我们可以使用手工的方法编辑文件document.xml来对该word文档内容进行编辑,或是提取文档media中图片文件的方式来提取该word文档中所插入的所有图片。
import zipfile
f=zipfile.ZipFile('./data/Python_word.docx','r')
for filename in f.namelist():
print(filename)
f.extract(filename)