|
|
python-docx官方文档:https://python-docx.readthedocs.io/en/latest/
python-docx库是使用 Python 操作 Word 文档的开源包,用于创建和更新 Word(*.docx)文件。python-docx库允许创建新文档,以及对现有文档进行更改,非常好用。在 Python 中,使用python-docx库可以读取和写入Word文档(*.docx),但只能操作扩展名为“.docx”的文件,而不能操作扩展名为“.doc”的文件。另外,这个库可以跨平台使用、还可以在没有安装 OHice 办公软件的情况下使用。
(1)document对象表示整个文档,可以通过document对象新建或打开Word文设置全局样式。
(2)document对象包含paragraph对象,一个paragraph对象用来表示文档中段落。
(3)一个paragraph对象包含多个run对象,一个run对象就是样式相同的一段文本
新建word文档document=Document()
设置样式document.styles[ Normal ].font.name= 宋体
建立新的段落p=document.add_paragraph()
设置段落的样式(间距、对齐等)
新建run对象run=p.add_run(你的内容)
设置文字的样式(大小、颜色、加粗、斜体等)
1.word文档的新建、打开和保存
from docx import Document
Document(docx=None)
参数docx是.docx文件的路径。如果docx参数为空,则按照默认模板新建Word 文档。
使用Document类的save方法可以保存Word文档,其语法格式如下。
Document.save(文件路径)
示例
from docximport Document
import os
cur_path=os.path.dirname(__file__)
savefilename=os.path.join(cur_path,'docx_new.docx')
document=Document()
document.save(savefilename)
示例
from docx import Document
import os
cur_path=os.path.dirname(__file__)
openfilename=os.path.join(cur_path,'docx_new.docx')
saveflename=os.path.join(cur path,'docx_open.docx'
document= Document(openfilename)
document.save(savefilename)
2.标题的添加
document.add_heading(text='',level=1)
段落样式由level决定,如果level为0,则样式设置为“标题”;如果level为 1,则使用“标题 1”,以此类推。如果level超出范围0~9.则引发ValueError 错误。
3.段落的添加
什么是段落?在 Word 文档中输入内容时,按 Enter 键将结束当前段落的编辑,同时开始一个新的段落。在 Word 文档中按 Enter 键后,会自动产生段落标记,该标记表示上一个段落的结束,在该标记之后的内容则属于下一个段落。
文档对象.add_paragraph(text='',style=None)
示例
from docx import Document
import os
cur_path=os.path.dirname(__file__)
savefilename=os,path,join(cur_path,'docx_add_paragraph.docx')
document = Document()
document.add_heading("学Python",level=1)
p=document.add_paragraph("在word文档中输入内容时,按Enter键将结束当前段落的编辑,同时开始新的段落。在word文档中按Enter 键后,会自动产生段落标记,该标记表示上二个段落的结束,在该标记之后的内容则属于下一个段落。")
document.save(savefilename)
4.run对象的添加
什么是run对象?一个run对象就是一组样式相同的文本。只要文本的样式没有改变,这组文本就是一个几,否则就是另外一个 run 对象。
添加run对象的语法格式如下。
段落对象.add_run(text=None,style=None)
from docx import Document
from docx.shared import Pt # 磅数
from docx.shared import RGBColor # 颜色
import os
cur_path=os.path.dirname(__file__)
savefilename=os.path,join(cur_path,'docx_add_run.docx')
document = Document()
p=document.add_paragraph("在 Word 文档中输入内容时,按")
p.add_run("Enter").font.size=Pt(36)
p.add_run("键将结束当前段落的编辑,同时开始新的段落。在 word 文档中按")
p.add_run("Enter").font.color.rgb=RGBColor(255,0,0)
p.add_run("键后,会自动产生段落标记,该标记表示上一个段落的结束,在该标记之后的内容则属于下一个段落。")
document.save(savefilename)
print(f"输出第一个段落中的 run 对象数量(len(document.paragraphs[0].runs)}")
for x in document,paragraphs:
#runs 返回一个列表
print(x,runs)
for run in x.runs:
print(run.text)
5.分页符的添加
可通过 document 对象的 add_page_break() 方法添加分页符。
6.表格的创建和读取
文档对象.add_table(self,rows, cols, style=None)
from docx import Document
import os
import random
cur_path=os.path.dirname(__file__)
savefilename=os.path.join(cur_path,'docx_add_table.docx')
document=Document()
table =document.add_table(rows=1, cols=3,style='Light List Accent 5')
header = table.rows[0].cells8
header[0].text = 'ID'
header[1].text ='姓名'
header[2].text = '分数'
1ist1=["张三","李四","王五","赵六","燕七"]
for i in range(3):
row cells = table.add row().cells
row cells[0].text = str(i)
row cells[1].text= random.choice(list1)
row cells[2].text= str(random.randint(90,100))
document.save(savefilename)
示例-使用table对象读取表格的内容
from docx import Document
import os
import random
cur_path=os.path.dirname(__file__)
filename=os.path.join(cur_path,'docx_add_table.docx')
my_document=Document(filename)
#获取所有的tab1e对象
def get_all_table(document):
#先获取所有的table对象,构造列表推导式
tables = [table for table in document.tables]
a1l_list=[]
#遮历表格
for table in tables:
for row in table.rows:
text list=[]
for cell in row.cells:
text_list.append(cell.text)
print(text_list)
all_list.append(text_list)
print(len(table.rows))
print(len(table.columns))
return all_list
print(get_all_table(my_document))
7.图片的添加
可使用document对象的add_picture()方法给文档添加图片,添加时还可以设定宽和高这里使用的单位为英寸,1英寸(in)~2.54厘米(cm)。
默认图片是居左对齐,如果要居中或居右对齐,只能变相处理。如设置图片当前所在的落格式为居中,这样,段落内的所有内容(包括图片)都居中。
示例
from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
import os
import random
cur_path=os.path.dirnmme(__filename__)
savefilename=os.path.join(cur_path,'docx_add_pic.docx')
document=Document()
#添加图片,设定宽和高
document.add_picture(os.path.join(cur_path,'office.png'),width=Inches(5),height=Inches(5))
last_paragraph=document,paragraphs[-1]
1ast_paragraph.alignment=WD_ALIGN_PARAGRAPH.CENTER
document.save(savefilename)
其中第11行代码使用document.paragraphs[-1]的列表负向索引获取最后一个段落
8.中文处理
利用python-docx库生成段落或run对象时,在没有设置中文字体的时候,生成的文档虽然可以显示中文,但大小不一,看起来很别扭,因此需要使用以下代码对字体进行设定。
from docx.oxml.ns import qn
document=Document()
document.styles['Normal'].font.name=u'宋体' #全局设定
document.styles['Normal'].element.rPr.rFont.set(qn('w:eastAsia'),u'宋体')
#对某个run对象设定样式
run._element.rPr.rFonts.set(qn('w:eastAsia'),"宋体')#单个run 对象设定
python-docx库的样式使用
1,段落的样式设定
段落可以设置样式,还可以设置对齐方式、首行缩进、行距和段落间距等
(1)段落样式的设置。
可以在添加段落的时候设置样式,也可以在添加段落后进行设置。
Paragraph=document.add_paragraph('段落内容',style='List Bullet')#添加段落--带段落样式
Paragraph.style='List Bullet'#添加投落后设置样式
示例-获取段落所有样式
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
document=Document()
styles=document.styles
for x in styles:
if x.type==WD_STYLE_TYPE.PARAGRAPH:
print(x.name,end=',')
(2)对齐方式设置
段落的对齐方式可以分为左对齐、居中对齐、右对齐和两端对齐
p.paragraph_format.alignment=WD_ALIGN_PARAGRAPH.LEFT
p.paragraph_format.alignment=WD_ALIGN_PARAGRAPH.RIGHT
p.paragraph_format.alignment=WD_ALIGN_PARAGRAPH.CENTER
p.paragraph_format.alignment=WD_ALIGN_PARAGRAPH.JUSTIFY
|
|