作者:新干果来源:公众号AirPython在日常办公自动化中,使用python真的可以达到事半功倍的效果!在之前的系列中,我们对python操作Excel进行了全面的总结。从这篇文章开始,我们继续说说另一种常见的文档格式:Word。准备Python运行Word最常用的依赖库是:python-docx。所以,在开始运行之前,我们需要在虚拟环境中安装这个依赖库。安装依赖pip3installpython-docx编写实战我们需要了解一个Word文档的页面结构,分别是:文档-文档章节-Section段落-段落文本块-运行经常操作的数据类型包括:段落、标题、列表、图像、表格、样式。首先,使用Document创建一个文档对象,相当于创建一个空白文档。fromdocximportDocument1.新建一个空白文档doc=Document()然后,就可以向文档中写入数据了。可以使用文档对象的add_heading(text,level)方法编写标题。其中,第一个参数为标题内容,第二个参数代表标题的级别,例如:分别写一级标题、二级标题、三级标题。2.新增内容2.1标题写一个一级标题,一个二级标题,一个三级标题doc.add_heading('一级标题',0)doc.add_heading('二级标题',1)医生。add_heading('Third-levelheading',2)Paragraph包含3个类别,分别是:普通段落,自定义样式段落参考段落默认使用文档对象的add_paragraph(text,style)方法添加段落。普通段落:如果不传入第二个参数style,则表示添加一个普通段落。引用段落:对于引用段落,您只需将段落样式指定为IntenseQuote。2.2.1添加普通段落doc.add_paragraph("我是普通段落。")2.2.3添加引用段落只需要指定样式:IntenseQuotedoc.add_paragraph('--我是引用段落--',style='IntenseQuote')自定义样式段落:这里有2种实现方法是:创建一个空的段落对象,并在添加文本块运行时同时指定字体样式;使用文档对象创建一个新样式(或现有样式),然后在添加时将其设置为第二种添加一个段落参数,考虑到样式的复用性,第二种方法可能更实用,对应的方法为:document.styles.add_style(style_name,type)以第二种实现方法为例,添加一个新定义的段落样式,设置段落的字体名称、字号、颜色、粗体、对齐方式等。PS:文末会提供第一种实现方法,该方法的第二个参数用于指定款式类型,包括3种。对应关系如下:1:段落样式2:字符样式3:表格样式defcreate_style(document,style_name,style_type,font_size=-1,font_color=None,font_name=None,align=None):"""创建样式:paramalign::paramdocument::paramstyle_name:样式名称:paramstyle_type:样式类型,1:段落样式,2:字符样式,3:表格样式:paramfont_name::paramfont_color::paramfont_size::return:"""iffont_colorisNone:font_color=[]#注意:需要判断样式是否存在,否则再次添加时会报错style_names=[style.nameforstyleindocument.styles]ifstyle_nameinstyle_names:#print('style已经存在,无需重新添加!')returnfont_style=document.styles.add_style(style_name,style_type)#字体大小iffont_size!=-1:font_style.font.size=[Pt(font_size)字体例如0xff,0x00,0x00]如果font_color和len(font_color)==3:font_style.font.color.rgb=RGBColor(font_color[0],font_color[1],font_color[2])#对齐方式、#注意:段落表只有在style_type!=2andalign:font_style.paragraph_format.alignment?=?align????????#?font_style.paragraph_format.alignment?=?WD_PARAGRAPH_ALIGNMENT.CENTER????????#?font_style.paragraph_format.alignment?=?WD_PARAGRAPH_ALIGNMENT.LEFT????????#?font_style.paragraph_format.alignment?=?WD_PARAGRAPH_ALIGNMENT.RIGHT????#?中文字体名称????if?font_name:????????font_style.font.name?=font_namefont_style._element.rPr.rFonts.set(qn('w:eastAsia'),font_name)returnfont_style需要注意的是,在添加新样式时,首先要判断样式名是否存在,否则会报错报道。最后,添加段落,将上面创建的样式传入第二个参数即可。使用add_paragraph()方法添加一个段落,返回值为一个段落对象。对象也可以使用add_run(text,style)方法在段落后添加一个文本块Run并指定样式1/paragraphstylestyle_paragraph=create_style(document=doc,style_name="style2",style_type=1,font_size=30,font_color=[0xff,0x00,0x00])2/字体样式style_string=create_style(document=doc,style_name="style3",style_type=2,font_size=15,font_color=[0x00,0x0x)3/0tablestyle对齐方式为:centeredstyle_table=create_style(document=doc,style_name="style4",style_type=3,font_size=25,0x00ff00font_color,[0],align=WD_PARAGRAPH_ALIGNMENT.CENTER)current_paragraph=doc.add_paragraph("我是一个有自己样式的段落(方法二)!!!",style_paragraph)characterstylecurrent_paragraph.add_run("[段落2中的一些字符]",style_string)在Word文档中,有序列表和无序列表也很常用。其实和添加段落类似,添加列表也是使用document对象的add_paragraph()方法,指定不同的样式style来添加,有序列表:ListNumber无序列表:ListBulletdefadd_list(document,data,isorder):"""添加列表数据到无序列表/有序列表:paramdocument:文档对象:paramdata:listdata:paramisorder:orderedlistornot:return:"""#unorderedlistifnotisorder:foritemindata:document.add_paragraph(item,style='ListBullet')#orderedelse:列表为itemindata:document.add_paragraph(item,style='ListNumber')2.3列表2.3.1无序列表add_list(doc,["unordered-Item1","unordered-Item2","unordered-Item3"],False)2.3.2有序列表add_list(doc,["Order-Item1","Order-Item2","Order-Item3"],True)接下来我们看如何添加插入图片,使用:add_picture(image,width,height)其中,第一个参数表示图片路径或图片流(网络图片),第二个和第三个参数用于设置图片的宽高,需要注意的是,如果宽高是没有明确指定,会以图片原始大小显示;如果只设置其中一个,会按设置的比例缩放,本地图片写起来很简单。defadd_local_image(doc,image_path,width=None,height=None):"""添加本地图像到Word文档:paramdoc::paramimage_path::paramwidth::paramheight::return:"""doc.add_picture(image_path,width=NoneifwidthisNoneelseInches(width),height=NoneifheightisNoneelseInches(height))2.4.1插入本地图片add_local_image(doc,'./1.png',width=2)对于网络图片,我们需要先通过网络图片地址获取图片字节流,传入第一个参数。导入sslio导入bytesiodefget_image_data_from_network(URL):urlopen(url).read())returnimage_datadefadd_network_image(doc,image_url,width=None,height=None):"""添加本地图像到Word文档:paramdoc::paramimage_url::paramwidth::paramheight::return:“”#获取获取image_data=get_image_data_data_from_network(image_url)doc.add_picture(image_data,width,width=width=widthwidthasnothennothereInch(width),高度,如果没有高度,则没有高度(高度)。.2插入网络图片url='图片网址地址'add_network_image(doc,url,width=3)最后,我们来看看如何在文档中插入表格。使用方法:add_table(row_num,column_num,style=None)返回值:表格对象
