pythondocx包_[Python02]Python-docx包的使⽤,快速处理
Word⽂件!
⽇常需要经常处理Word⽂档,发现了⼀个新的Python包:Python-docx,处理docx⼗分⽅便。
⽽且这个包和pandas包结合使⽤,可以在word插⼊excel表格,节省了很多复制、粘贴、调整表格样式的时间,真的很⽅便!
但是要注意:Python-docx只能处理docx、docx、docx⽂件!
下⾯给⼤家介绍⼀下如何使⽤Python-docx吧,抛砖引⽟~
0. 学习思路
⼀、 基础!安装Python-docx,并对照”官⽅帮助说明“了解包的对象和基本函数;这⾥建议在python交互模式下进⾏,可以直观的看到返回值和报错。
⼆、 出题!⾃⼰定义⼀个问题并解决,来加深对包的理解。题⽬:”创建⼀个docx⽂件,要求输⼊2个表格,并且这个表格有填充的数字,表格前有相应标题。“
三、 进阶!试试包的更多函数,看会触发什么效果。结合pandas,学习表格和字体、字号、颜⾊的处理
⼀、 基础
1.1 使⽤conda安装python-docx:
conda install -c conda-forge python-docx
没有了解过conda的同学,可以看看 Anaconda国内镜像停⽌后,怎么办?(已恢复),⽂中有简单介绍。
1.2 简要了解Python-docx:
1 打开/读取⽂档
第⼀步当然是创建⽂档并打开啦~
from docx import Document
import os
path = "a.docx"
os.system("touch %s" %path) # 调⽤shell命令创建a.docx⽂件
documentNew = Document() # 不指定路径是创建⽂件
documnet = Document(path) # 指定路径是读取⽂件
w( Д )w 发现报错 PackageNotFoundError :
ptions.PackageNotFoundError: Package not found ...
原来是因为a.docx中没有任何内容。打开a.docx之后输⼊⼏个字符,再重试以上代码,就不会报错了。
2 插⼊标题
使⽤ add_heading() 或add_paragraph()添加标题:
document.add_heading('Document Title', 0)
# ⽅法1
document.add_heading('Heading 1', level=1) # ⽤level设置,level为0-5,对应不同级别的标题
# ⽅法2
document.add_paragraph('Heading 1', ) # ⽤style来设置不同级别的标题
3. 插⼊段落
段落是word⽂档中最基本的对象之⼀。插⼊段落主要使⽤的函数是:add_paragraph() #添加段落
add_run() #追加⽂字
#插⼊段落, 同时设置粗体和斜体~
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True #粗体
p.add_run(' and some ')
p.add_run('italic.').italic = True #斜体
段落还可以使⽤style设置风格。
# 圆点列表
document.add_paragraph(
'first item in unordered list', style='List Bullet'
)
# 序号列表
document.add_paragraph(
'first item in ordered list', style='List Number'
)
# 引⽤
document.add_paragraph('Intense quote', style='Intense Quote') 4 插⼊图⽚
from docx.shared import Inches
document.add_picture('image-filename.png', width=Inches(1.0))
5 分页符
document.add_page_break()
6 插⼊表格
主要使⽤的函数:add_table() # 新建表格
add_row() # 添加⾏
add_col() # 添加列
records = (
shell创建文件并写入内容(3, '101', 'Spam'),
(7, '422', 'Eggs'),
(4, '631', 'Spam, spam, eggs, and spam')
)
# 新建1⾏3列的表
table = document.add_table(rows=1, cols=3) # row⾏, col列
# 使⽤table 的rows()和columns()得到这个表格的⾏数和列数
print(ws))
print(lumns))
# 添加标题⾏
hdr_cells = ws[0].cells # 注意 ws(0)表⽰第1⾏
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
# 将records中的数据添加到新建的table中
for qty, id, desc in records:
row_cells = table.add_row().cells
row_cells[0].text = str(qty)
row_cells[1].text = id
row_cells[2].text = desc
如果熟悉pandas,那你肯定知道创建的dataframe默认会⾃带标题⾏。但是python-docx不同,需要⾃⾏添加标题⾏。这⾥要注意⼀下,不过别紧张不需要死记硬背,出现问题多调试就⾏~
7 保存⽂件
document.save(path) # 指定路径
⼆、 做题!
⾄此,官⽅⽂档的⽰例学的差不多了,基本上就是对标题、段落、表格和图⽚的处理。
下⾯来做⼀个简单的题⽬:创建⼀个docx⽂件,要求输⼊2个三⾏七列的三线表。
表格1:标题栏为数字1到7。表格前有相应标题“1. 表格1”,标题的字体为等线,且为斜体。
表格2:标题栏为⼤写字母A到G。表格前有相应标题“2. 表格2”, 标题的字号为12,且为粗体。
希望你先⾃⼰写⼀下,有问题多搜索。然后再来看看我的答案,对⽐下思路的不同。这样学的更快,有问题也可以互相交流学习~
实现代码:
#!/bin/usr/env python
from docx import Document
from docx.shared import Pt # 设置字号
document = Document()
# 表格1
# 标题1,字体为等线,且为斜体
title1 = document.add_heading(u'1.表格1', level=1)
title1.style.font.name = u'等线' # 设置中⽂字体前⾯要有u
title1.italic = True
table1 = document.add_table(rows=3,cols=7) # 3⾏7列
# 设置表格标题栏
for i in range(7):
table1. # 风格为三线表
# 表格2
# 标题2,字号为12,且为粗体
title2 = document.add_paragraph(u'2.表格2',)
title2.style.font.size = Pt(12)
title2.bold = True
table2 = document.add_table(rows=3,cols=7) # 3⾏7列
headLine = ["A","B","C","D","E","F","G"]
# 设置表格标题栏
for i in range(7):
table2. # 风格为三线表
# 储存
document.save("test.docx")
最终结果↓ :
三、进阶
3.1 表格样式模板:
其中常⽤的有Light Shading(三线表)↓ :
Table Grid(⽹格型)↓ :
Light Grid(浅⾊⽹格)↓ :
Medium List 1(中等深浅列表1) ↓:
Medium List 2(中等深浅列表2) ↓ :
可以点击查看 python---word表格样式设置. 蜗v⽜. CSDN 查看更多样式⽰例。但是现在的Python-docx包代码有些更新,样式和该链接中的图例部分有出⼊。使⽤时需要⾃⾏调试~
3.2 ⾃定义表格样式
先试试下⾯的代码~
from docx import Document # 输出docx
from docx.shared import Pt # 设置字号
from docx.shared import Cm # 设置宽度,单位是cm
from docx.shared import RGBColor # 设置字体颜⾊
document = Document()
table = document.add_table(6,2, ) colHeadLine = ["A","B","C","D","E","F"]
for i in range(6):
# 给单元格赋值的同时修改样式,不影响整个表格
cell = ll(i,0)
cell.width = Cm(2) # 设置单元格宽度为2cm
run = cell.paragraphs[0].add_run(colHeadLine[i])
b = RGBColor(0,100,0)
run.font.name = u'等线'
run.italic = True
# 修改整个表格的字体样式
table.style.font.size = Pt(10)
# 保存
document.save("test.docx")
3.2.1 表格⾃动适应窗⼝⼤⼩:
table.autofit = True
3.2.2 ⾃定义表格宽度或⾼度:
a. ⽅法1:
b. ⽅法2:
特别需要注意的是,column和row后⾯是有s的!
官⽅⽂档中有⽆s标注错误,害得我还以为不能这样操作,捂脸.jpg。lumns[0].width=Cm(2) # 不起效,不知道为什么
3.2.3 对齐
a. 表格对齐:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论