当前位置: 首页 > 后端技术 > Python

-Python类自动化-中Word的常用功能

时间:2023-03-26 00:25:24 Python

安装Python-docxdocx不是Python的标准库,而是第三方扩展。我们通过pip命令安装:pipinstallpython-docx如果pip由于网络或其他原因无法正常安装请访问https://pypi.org/project/python-docx/手动下载压缩文件并安装tarxvzfpython-docx-{version}.tar.gzcdpython-docx-{version}pythonsetup.pyinstallfast开始新建文档fromdocximportDocumentdocument=Document()这一步很简单。我们声明一个Document对象。如果不传入docx文档路径,默认会打开一个新的空白文档。该方法使用默认参数调出文档对象极大的简化了我们的代码量,使得文档的保存更简单fromdocximportDocumentdocument=Document()document.save("./nihao.docx")保存方法为用于保存docx文档尝试写标题和内容AddthetitlefromdocximportDocumentdocument=Document()document.add_heading('地下交通站')document.add_heading('丁香楼',level=2)#document.save("./UndergroundTransportationStation.docx")进入源码查看add_heading方法defadd_heading(self,text="",level=1):"""返回文档末尾新增的一个标题段落。标题段落将包含*text*并且其段落样式由*level*决定。如果*level*为0,则样式设置为`Title`。如果*level*为1(或省略),使用`Heading1`。否则,样式设置为“标题{level}”。引发|ValueError|如果*level*超出范围0-9。"""ifnot0<=level<=9:raiseValueError("levelmustbeinrange0-9,got%d"%level)style="Title"iflevel==0else"Heading%d"%levelreturnself.add_paragraph(text,style)可以看到add_heading方法接收两个参数,text参数为标题文字,level为level大小,默认为一级标题,文字,图片,tables等paragraph=document.add_paragraph('贾贵原来是安丘市的流氓')我们可以使用add_paragraph方法来写段落内容,但是我们更想为内容指定一些样式。自定义一些样式python-docx支持大部分原生docx文本样式,对齐,缩进,行间距,字号,字体样式,颜色等等,我撅着屁股跟他打架,二十年后,我又要当好人了……汉奸,今天不打人,今天打你。一等流氓,二土匪,日本鬼子,宪兵,警察。tectiveteam自己的儿子将维持协会。建立皇家乐园需要动物,维持新秩序也需要动物。总之,皇军和畜生是分不开的。皇军将动物视为兄弟。我知道那个女孩很好。你掉落的宝刀不错,我要。你的办公桌很好,我是,我在这里工作。你老婆漂亮,而我……我傻得跟天下汉奸似的。对对对,我就是那个狗屎贾队长。我们把它写成一段文字然后修改fromdocximportDocumentfromdocx.enum.textimportWD_PARAGRAPH_ALIGNMENTfromdocx.sharedimportPt,RGBColorfromdocx.oxml.nsimportqndocument=Document()#全局指定字体document.styles['Normal'].font.name=u'.Pingfang-Jian'document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'),u'.Pingfang-Jian')header=document.add_heading('UndergroundTransportationStation',level=2)#设置标题对齐方式居中对齐header_format=header.paragraph_formatheader_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTERtext='''我捂着脸撅着屁股打屁股他醒了。二十年后,老子又是一个好人……一个汉奸。我他妈今天不打人,我他妈今天打你。一等流氓二匪,日本鬼子的宪兵队,警队亲儿子的侦探队,将维护社会。建立王者乐园需要动物,维持新秩序更需要动物。总之,皇军和畜生是分不开的。皇军将禽兽视为兄弟。我知道那个女孩很高。宝刀你掉了也没关系,我要。你的办公桌很好,我会在这里工作。你老婆又大又漂亮,而我……我傻得跟天下汉奸似的。没错,我就是那个狗屎贾队长。'''#声明一个段落paragraph=document.add_paragraph()#设置居中对齐paragraph_format=paragraph.paragraph_formatparagraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER#设置块对象run=paragraph.add_run(text)#设置字体大小andColorrun.font.size=Pt(7)run.font.color.rgb=RGBColor(0x42,0x24,0xE9)#RGBdocument.save("./undergroundtransportationstation.docx")在文档中做了什么object设置全局字体,注意:如果是docx没有自带的字体样式,需要将字体下载到本地进行选择。设置二级标题。通过paragraph_format属性设置对齐方式。通过add_run添加块元素,插入准备好的文本。设置文本内容的字体大小和颜色并保存文档。保存文档的效果如下。Insertapicturefromdocx.sharedimportInchesdocument.add_picture('./ShengshiMeiyanJiaCaptain.png',width=Inches(1.0))通过add_picture方法添加图片本地图片到文档,默认docx库不支持解析并添加在线图片地址。所以如果我们要添加在线图片,可以先获取图片的二进制流内容,然后通过add_picture方法importrequests,iofromdocx.sharedimportInchesurl='https://www.easyicon.net/api/resizeApi.php?id=1311353&size=128'io_url=io.BytesIO(requests.get(url).content)#添加图片document.add_picture(io_url,width=Inches(1.0))插入docx文档中的form是一个可以插入和操作的表格tables=document.add_table(rows=2,cols=2)使用add_table方法添加表格,我们尝试通过表格的一些属性和方法来操作cellcell=table.cell(0,1)cell.text='嘿,让我们战斗吧'。文本属性可以为单元格分配(赋值或修改)一个值。0表示第一行,1表示第二列。这里表格的行和列索引都是从0开始指定写入行的单元格,通过rows属性指定某一行或某几行。然后通过row的cells属性给cell赋值=table.rows[2]row.cells[0].text='前几天最热的时候,我们家热得快要热了explode'row.cells[1]。text='那你开空调'2表示指定表中第三行0表示写此行第一列1表示写此行第二列使用len函数获取表中的行和列Totalrow_count=len(table.rows)col_count=len(table.columns)逐渐添加行和列当我们无法确定当前文档表中的行数时,我们可以选择添加行或实时列,可以灵活控制长度和宽度,减少不必要的空行或空列比如我们不知道数据列表的长度或者需要实时添加行,可以参考下面的代码项=[{"name":"嘉贵","desc":"侦探队长","createDate":"2021-04-20"},{"name":"金标","desc":"守卫Captain","createDate":"2021-04-21"},{"name":"黑腾","desc":"特工处处长","createDate":"2021-04-22"},{"name":"孙有福","desc":"丁香里司库ou","createDate":"2021-04-23"},{"name":"水根","desc":"丁香楼哥们","createDate":"2021-04-24"}]#添加表table=document.add_table(1,3)table.style='MediumGrid1Accent1'#Headerheading_cells=table.rows[0].cellheading_cells[0].text='Name'heading_cells[1].text='Position'heading_cells[2].text='Creationtime'foriteminitems:cells=table.add_row().cellscells[0].text=item["name"]cells[1].text=item["desc"]单元格[2].text=item["createDate"]添加一个1行3列的表作为标题,为表添加一点样式。MediumGrid1Accent1使用add_row方法动态添加行。表格样式列表请参考https://www.cnblogs.com/AbnerLc/p/13375707.html我们也可以使用len(items[0])获取items列表中字典的长度为列的长度#Addtabletable=document.add_table(1,len(items[0]))Headersandfooters有时我们给文档添加页眉和页脚Addheadersdocument=Document()section=document.sections[0]header=section.headerparagraph=header.paragraphs[0]paragraph.text="定香楼"#paragraph.text="左对齐文字\t居中文字\右对齐文字"paragraph.style=document.styles["页眉"]声明一个section,使用header属性添加到文档中,在header中添加一个footerfooter=section.footerparagraph=footer.paragraphs[0]#居中显示paragraph.text="\t来自地铁站\t"改一下即可headertofooter和addafootertothedocument这里只是罗列了python-docx库的一些常用函数,更多的文档样式和使用方法读者可以使用python-docx的官方文档https://python-docx.readthedocs.io祝你心情愉快!!