Python-docx入门
创建Word文档对象
创建空Word对象
from docx import Document #创建文件对象 document = Document() #保存文件对象 document.save(r'D:\python\new1.doc')
获取已有的Word文件对象
from docx import Document ##获取已有word对象## doc = Document(r'D:\python\new1.doc')
使用计算机本身Word创建word文档
使用计算机本身的Word来创建word文档,使用前需要安装pypiwin32第三方库,如下代码进行Word文档的文件格式由.doc转为docx,我这里使用的是绝对地址,若Word文件和py文件在同一目录(相对地址)就直接写入文件名即可。
from docx import Document from win32com import client ##doc另存为docx## #获取已有word对象 doc = Document(r'D:\python\new1.doc') #路径 doc_path = r'D:\python\new1.doc' docx_path = r'D:\python\new2.docx' #获取Word应用程序对象 Word = client.Dispatch('Word.Application') #打开对应的Word文档 doc = Word.Documents.Open(doc_path) #另存到docx_path中,12表示docx文件格式 doc.SaveAs(docx_path,12) #关闭Word文档 doc.Close() #退出软件 Word.Quit()
获取Word文档中的对象
获取段落对象
使用.paragraphs获取文档全部对象,.paragraphs[a]获取下标为a的段落对象
from docx import Document ##遍历Word文档中的段落## #获取已有word对象 doc = Document(r'D:\python\new1.doc') for p in doc.paragraphs: #输出Word文档中的段落内容 print(p.text)
获取表格对象
获取表格对象,遍历所有单元格,输出数据。
from docx import Document ##获取word中的表格对象,遍历所有单元格,输出数据## doc = Document(r'D:\python\new1.doc') tables = doc.tables #获取文档中全部所有的表格对象 table = tables[0] #获取下标为0的表格 values = [] #遍历表格中所有的单元格 for row in table.rows: #遍历所有行对象 for cell in row.cells: #遍历行中所有单元格对象 values.append(cell.text) #将单元格中的文本内容添加到列表中 values = ' '.join(values) #调用join方法将这一行中所有单元格内容用' '连接成字符串重新存放到列表中 print(values) values = []
表格对比
比较两个表格对象,找出不同的单元格位置,代码如下。操作前先安装deepdiff第三方库(cmd pip install deepdiff),导入依赖后,调用DeepDiff方法。
from docx import Document from deepdiff import DeepDiff #比较new1和new2中的表格内容的不同,输出 def get_doc_values(path): doc = Document(path) tables = doc.tables table = tables[0] all_values = [] for row in table.rows: values = [] for cell in row.cells: values.append(cell.text) all_values.append(values) return all_values table1 = get_doc_values(r'D:\python\new1.doc') table2 = get_doc_values(r'D:\python\new2.doc') ddiff = DeepDiff(table1,table2) print(ddiff)
获取文本框对象
from docx import Document ##获取new1中的文本框里面的内容## #连接new1 doc = Document(r'D:\python\new1.doc') children = doc.element.body.iter() #获取所有目录对象 for child in children: # 通过类型判断目录 if child.tag.endswith('textbox'): #判断是否是文本框目录 i = [] for ci in child.iter(): #遍历文本框目录中的内容 if ci.tag.endswith('main}r'): #筛选出是文本内容片段 i.append(ci.text) #将文本内容片段组成列表 print("".join(i)) #输出该文本框的内容
将数据写入Word文档
将文字写入Word文档中
python-docx提供了add_heading、add_paragraph等方法将文字类型数据以不同形式添加到Word文档中。
from docx import Document ##给new1.doc中写入文字## #连接new1 r'D:\python\new1.doc' doc = Document() doc.add_heading('一级标题',level=1) #添加标题 p2 = doc.add_paragraph('第二个段落') #添加段落 p1 = p2.insert_paragraph_before('第一个段落') p3 = doc.add_paragraph('新段落') #追加内容 p3.add_run('加粗').bold = True p3.add_run('以及') p3.add_run('斜体').italic = True doc.save(r'D:\python\new3.doc')
将图片写入Word文档中
python-docx提供了add_picture(‘图片地址’,width=,hight=)方法把图片添加到Word中。
from docx import Document from docx.shared import Cm, Pt,Inches ##给new1.doc中添加图片另存为new3## #连接new1 r'D:\python\new1.doc' doc = Document(r'D:\python\new1.doc') #添加图片 doc.add_picture(r'D:\python\1.png',width=Inches(1.25)) doc.save(r'D:\python\new3.doc')
将表格写入Word文档中
python-docx提供了add_table(rows=,cols=,style= *)方法把图片添加到Word中。 from docx import Document ##创建table,设置table样式存为new4## #创建table,设置table样式 doc = Document() table = doc.add_table(rows=3,cols=4,style = 'Table Grid') doc.save(r'D:\python\new4.doc')
向单元格中加入添加数据
from docx import Document ##创建table,设置table样式存为new4## #创建table,设置table样式 doc = Document(r'D:\python\new5.doc') #添加3行4列的表格 table = doc.add_table(rows=3,cols=4,style = 'Table Grid') #第一种方法:先获取行,再获取改行中对应的单元格 #在第一行第一列填入内容 row = table.rows[0] row.cells[0].text = '第一行第一列' #第二种方法:直接指定行号与列号 #在第一行第二列填入内容 cell = table.cell(0,1) cell.text = '第一行第二列' doc.save(r'D:\python\new5.doc')
图片添加到表格中
from docx import Document from docx.shared import Cm, Pt,Inches ##给单元格中的文字后面追加图片## #创建table,设置table样式 doc = Document(r'D:\python\new5.doc') #添加3行4列的表格 table = doc.add_table(rows=3,cols=4,style = 'Table Grid') cell = table.cell(0,1) cell.text = '第一行第二列' #获取单元格中的段落对象 p = cell.paragraphs[0] #获取追加对象,也就是后面会说的内联对象 run = p.add_run() run.add_picture(r'D:\python\1.png',width=Inches(1.25)) doc.save(r'D:\python\new5.doc')
修改Word文档样式
文本格式
块对象
块对象一般包括标题、段落、图片、表格、有序列表与无序列表。块对象的属性指定了块对象所在的位置,如缩进、段落之间的段落间距等,常用的属性由alignment(对齐方式)、index(缩进)、pace(行间距)等。示例代码如下:
from docx import Document # from docx.shared import Cm, Pt,Inches from docx.enum.text import WD_ALIGN_PARAGRAPH ##修改word文档样式## doc = Document(r'D:\python\new5.doc') #添加一个段落 p = doc.add_paragraph('P为段落对象,设置段落水平居中对齐') #P为段落对象,设置段落水平居中对齐 p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER #设置段落左对齐 p1 = doc.add_paragraph('P1为段落对象,设置段落左对齐') p1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT #设置段落右对齐 p2 = doc.add_paragraph('P2为段落对象,设置段落右对齐') p2.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.RIGHT doc.save(r'D:\python\new5.doc')
内联对象
块对象的所有内容都包含在内联对象中,一个块对象由一个或多个内联对象组成。内联对象一般包括文字、句子、段落等,通常通过内联对象的相关属性来指定字体的样式,如粗体、斜体、大小等。示例代码如下:
from docx import Document from docx.shared import Pt ##修改word文档样式## doc = Document(r'D:\python\new5.doc') p = doc.add_paragraph('一段内容') #给P后追加内容 : 内联对象 run= p.add_run('内联对象') #p为段落对象 font = run.font #获取对象的属性 font.size = Pt(35) #设置字体大小 font.italic = True #设置字体为斜体 doc.save(r'D:\python\new5.doc')
Word文档样式
Word文档中常见的样式由段落样式、字符样式、表格样式等,python-docx库将样式定义在styles属性中,但它并不包含Word中所有的样式。示例代码如下:
from docx import Document from docx.enum.style import * doc = Document(r'D:\python\new5.doc') styles = doc.styles #获取文档所有的样式 #遍历所有样式 for style in styles: if style.type == WD_STYLE_TYPE.TABLE: #筛选出表格类型的所有样式 doc.add_paragraph(f"表格样式名称:{style.name}") table = doc.add_table(3,3,style = style) #将表格设置成该样式 cells = table.rows[0].cells cells[0].text = '第一列内容' cells[1].text = '第二列内容' cells[2].text = '第三列内容' doc.add_paragraph('\n') doc.save(r'D:\python\new5.doc')
我的博客地址:https://www.cnblogs.com/tuoqi/articles/15633185.html