一些非常有用的技巧,一定要看完
python有很多第三方库,前面的文章已经说过使用python-pptx库了。
同样的,要想用python处理word文档就需要安装python-docx库。
[图片上传失败...(image-256304-1607071055507)]
1、安装python-docx库
首先找到python根目录(就是有python.exe的文件夹)打开Scripts文件夹
Shift+鼠标右键选择在此处打开
powershell窗口或者cmd窗口输入
pip install python-docx按下回车等待安装完成。
2、基本操作语法
2.1打开文档
document = Document()
第一行从docx模块中引入Document类;
第二行是声明一个Document()对象,相当于创建了一个docx文档,为文档增加一些内容。
第三行进行了一些操作的文档保存到一个文件中。
不填默认为新建一个文档。
from docx import Document
document = Document()
document.save("演示如何操作Word文档.docx")
要打开一个已存在的文件
document = Document("已存在的文件名.docx")
2.2加入不同等级的标题
document.add_heading(u'总标题',0)
document.add_heading(u'一级标题',1)
document.add_heading(u'二级标题',2)
add_heading()方法会在文档的末尾添加标题,可以带两个参数,参数text是标题的文本,level是标题的级别,可以设置的范围是0-9,0代表文档标题,从1开始分别对应一级标题、二级标题一直到九级标题,默认值是1。
如果设置的数字超过这个范围,编译器会报ValueError。
2.3添加文本、段落
paragraph = document.add_paragraph(u'文本内容')
add_paragraph()会在文档末尾添加段落,此方法可以接受两个参数,text为段落的文本内容,这个文本内容可以包含\t、\n等特殊字符。style参数用来设置样式
from docx import Document
lyric = "那一年的雪花飘落梅花开枝头\n那一年的华清池旁留下太多愁\n"
lyric = lyric + "不要说谁是谁非感情错与对\n只想梦里与你一起再醉一回\n"
lyric_add = "爱恨就在一瞬间\n举杯对月情似天\n"
lyric_add = lyric_add + "爱恨两茫茫\n问君何时恋"
document = Document()
paragraph = document.add_paragraph(text=lyric)
paragraph.add_run(text= lyric_add)
prior_paragraph = paragraph.insert_paragraph_before('新贵妃醉酒')
document.save("1-使用段落.docx")
add_paragraph()方法会返回Paragraph()对象。该对象包含了对此段文本进行操作的一些方法和属性,如下:
· add_run():用来追加段落内容,设置样式等。
· clear():将段落删除,并返回该段内容,但是格式和样式会保留
· insert_paragraph_before():在本段落之前插入新段落。
· alignment:设置对齐方式
· paragraph_format:设置段落格式
· style:返回样式
· text:返回文本
2.4设置字号
run = paragraph.add_run(u'设置字号、')
run.font.size = Pt(24)
2.5设置英文字体
run = paragraph.add_run('Set Font,')
run.font.name = 'Consolas'
2.6设置中文字体
run = paragraph.add_run(u'设置中文字体、')
run.font.name=u'宋体'
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
2.7设置斜体
run = paragraph.add_run(u'斜体、')
run.italic = True
2.8 设置粗体
run = paragraph.add_run(u'粗体').bold = True
2.9增加引用
document.add_paragraph('Intense quote', style='Intense Quote')
2.10 增加列表
document.add_paragraph(
u'无序列表元素1', style='List Bullet'
)
document.add_paragraph(
u'无序列表元素2', style='List Bullet'
)
Style='List Bullet'为无序列表
Style='List Number'为有序列表
2.11添加图片
add_picture(image_path_or_stream, width=None, height=None)
可以调整图片的宽和高,此处不讨论
from docx import Document
document = Document()
document.add_picture('1.png', width=Inches(1.25))
1.png为图片名称(图片位置必须与代码文件在同一个文件夹内)
2.12增加表格
add_table()方法会返回一个Table对象。rows代表行数,cols代表列数;style代表样式,暂时不谈。
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Name'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
Table()对象中报了对表格进行操作的方法和属性,如下:
· add_column(width):添加列(需要设置列宽)
· add_row():添加行
· cell(row_idx, col_idx):访问单个单元格
· row_cells(row_idx):返回一个序列(行号为row_idx的行内所有单元格)
· column_cells(column_idx):返回一个序列(列号为column_idx的列内所有单元格)
· rows:返回的是_Rows对象,是一个包含了所有行(_Row对象)的列表
· columns:返回的是_Columns对象,是一个包含了所有列(_Column对象)的列表
想要熟练使用python-docx操作Word文档:需要认识Table()、_Cell()、 _Row()、 _Rows() _Column() 和 _Columns()五个类。
2.13 再增加3行表格元素
cell()方法实际上是返回了一个_Cell()对象。_Cell()对象代表的是一个具体的单元格,包含了操作一个单个单元格的方法与属性,如下:
· add_paragraph(text=u'', style=None):在单元格内添加段落。
· add_table(rows, cols):在单元格中添加表格
· merge(other_cell):合并单元格
for i in range(3):
row_cells = table.add_row().cells
row_cells[0].text = 'test'+str(i)
row_cells[1].text = str(i)
row_cells[2].text = 'desc'+str(i)
2.14增加分页
document.add_page_break()
要在Word文档中使用分页,要使用Document()对象中的add_page_break()方法,会返回一个包含一个分页符的Paragraph对象。
from docx import Document
document = Document()
document.add_paragraph('这是第一页')
document.add_page_break()
document.add_paragraph('这是第二页')
document.save("5-使用分页.docx")
2.15增加章节
默认是增加一个新页
document.add_section(start_type=2)
2.16保存文件
document.save(u'测试.docx')
2.17读取文档中的内容
方向:反向利用属性
(1)读取段落文本
from docx import Document
document = Document("1-使用段落.docx")
for each in document.paragraphs:
print(each.text)
document的paragraphs属性,会返回一个列表,列表内容为文档中所有段落(为Paragraph对象)的合集。
(2)读取标题
需要注意的是,对于一个Document来说,标题也是Paragraph。所谓标题,严格上说是一种带了格式的段落。
from docx import Document
document = Document("0-使用标题.docx")
for each in document.paragraphs:
print(each.text)
(3)读取表格单元格内容
使用tables属性,可以读取所有的表格;
from docx import Document
document = Document("3-使用表格.docx")
for each in document.tables:
print(each)
print(document.tables[0].cell(0,0).text)
# 表格对象
1 # 第一个表格中第一个单元格的内容
(4)读取图片
需要使用inline_shapes属性;
from docx import Document
document = Document("7-使用图片.docx")
for each in document.inline_shapes:
print(each)
# 图片对象