文源网,仅供学习,如有侵权请联系删除。如果报表能够自动化,我们会节省很多时间,更有效率地完成工作。那么,如何使用python实现报表自动化呢?本文将介绍xlwt、xlrd、xlutils的常用功能,xlwt写Excel时公式的应用,以及xlwt写到特定目录,指导大家实现报表自动化。Python编写Excel1,准备工作并安装xlwt在终端输入pipinstallxlwt或easy_installxlwt导入xlwt包:importxlwt#编写2、基础教程Createnewworkbook&addsheet创建一个新工作簿,然后添加sheetf=xlwt.parameter1)Storecontentincolumnj(parameter2)(parameter3)sheet1.write(i,j,'storethiscontentinrowi,column',style)该语句实现的功能是写入第i行j列存放的是第三个参数的内容,第四个参数是样式(比如字体,背景),第四个参数可以不传。合并单元格并写入内容:sheet1.write_merge(x,x+m,y,y+n,'content',style)这个y语句表示[x:x+m]行[y:y+n]列矩阵到一个单元格中。存放第五个参数的#内容。同样,样式参数也不能作为参数传递。最后,可以使用f.save('demo')将f保存到excel中。3、实战我们可以先新建一个工作簿,然后insert添加两个sheet,然后查看效果#coding=utf-8importxlwtf=xlwt.Workbook()#新建一个工作簿sheet1=f.add_sheet(u'Table1',cell_overwrite_ok=True)sheet2=f.add_sheet(u'Table2',cell_overwrite_ok=True)save('xlwt_tutorial')我们开始向sheet写入内容,没有传入style参数,我们只使用写入函数importxlwtf=xlwt.Workbook()#创建工作簿sheet1=f.add_sheet(u'Table1',cell_overwrite_ok=True)sheet2=f.add_sheet(u'Table2',cell_overwrite_ok=True)row=0temp=[u'name',u'age',u'school',u'professional']forpos,vinenumerate(temp):sheet1.write(row,pos,v)row+=1sheet1.write(row,0,u'张三')sheet1.write(row,1,18)sheet1.write(row,2,u'清华大学')row+=1sheet1.write(row,0,u'李四')sheet1.write(row,1,20)sheet1.write(row,2,u'北京大学')f.save('xlwt_tutorial')这样我们就创建了一个3行4列的表格。(write函数的行值和列值从0开始)接下来我们使用write_merge函数合并单元格,在f.save前添加一行代码:sheet1.write_merge(1,2,3,3,u'汉语言文学')合并第2-3行第4列。pythonxd读取excel1,准备安装xlrd,在终端输入pipinstallxlrd或easy_installxlrd导入xlrd包:importxlrd#阅读2,基础教程&实战打开一个Excel,然后输出所有工作表的名字#coding=utf-8importxlrdimportunioutf=xlrd.open_workbook(r'xlwt_tutorial')printf.sheet_names()output:[u'Table1',u'Table2']获取范围内i的所有工作表(len(f.sheet_names())):sheet1=workbook.sheet_by_index(i)获取sheet中的内容#coding=utf-8f=xlrd.open_workbook(r'xlwt_tutorial')sheet1=f.sheet_by_index(0)#打开第一个sheetsheet2=f.sheet_by_name(u'Table2')#打开名为小葡萄的sheet#输出sheet名称、行数、列数printsheet1.name,sheet1.nrows,sheet1.ncolsprintsheet2.name,sheet2.nrows,sheet2.ncolsoutputFor:Table134Table200printsheet1.row_values(1)#获取第二行的内容printsheet1.col_values(2)#获取第三列的内容输出为:[u'张三',18.0,u'清华大学',u'中国语言文学'][u'学校',u'清华大学',u'北京大学']#获取单元格内容printsheet1.cell(1,0).value#获取cell内容的数据类型printsheet1.cell(1,1).ctype#ctype:0empty,1string,2number,3date,4boolean,5error输出为:张三2xlutils常用功能1.准备安装xlutils在终端输入pipinstallxlutils或easy_installxlutils引入了xlutils包:importxlutils2,xlutils中的复制功能我们可能会遇到一个问题,想编辑一个存储的Excel*,但是xlrd是只读模式,不能写入。但是xlwt是只写模式,不能读入Excel文件进??行编辑。我们可以使用xlrd打开一个文档,然后使用xlutils中的复制功能复制文档*,然后进行编辑。importxlrdfromxlutils.copyimportcopyf=xlrd.open_workbook(r'xlwt_tutorial')wb=copy(f)#将f复制到wbsheet1=wb.get_sheet(0)#打开sheetprintsheet1.namesheet1.write(3,0,'change')wb.save('xlwt_tutorial')输出为:表1的输出表发生了变化。3、xlwt写Excel时公式的应用我们用xlwt写一个表coding=utf-8importxlwtf=xlwt.Workbook()#创建工作簿sheet1=f.add_sheet(u'scorestatistics',cell_overwrite_ok=True)mdict={"monkey":{"writing":80,"reading":60,"speaking":70,"listening":60},"grape":{"writing":100,"reading":80,"speaking":70,"listening":60}}sheet1.write(0,0,u'成绩统计')sheet1.write(1,0,u'书法成绩')sheet1.write(2,0,u'阅读成绩')sheet1.write(3,0,u'口语成绩')sheet1.write(4,0,u'听力成绩')temp=['写作','阅读','口语','听力']forpos,nameinenumerate(mdict):sheet1.write(0,pos+1,name)forp,vinenumerate(temp):sheet1.write(p+1,pos+1,mdict[name][v])f.save('scorestatistics')统计葡萄的总分和猴子的总分:在f.save前添加代码:sheet1.write(5,0,u'totalscorestatistics')foriinrange(len(mdict)):forstr=chr(65+i+1)+'2+'+chr(65+i+1)+'3+'+chr(65+i+1)+'4+'+chr(65+i+1)+'5'打印strsheet1.write(5,i+1、xlwt.Formula(forstr))输出为:B2+B3+B4+B5C2+C3+C4+C54,xlwtwrite进入具体目录,由于代码的层次感,使得代码整体框架美观。我们需要将文件写入特定目录。但是由于xlwt中没有直接写入特定目录的功能。所以使用shutil.move函数将文件MOV到特定目录:##coding=utf-8importxlwtimportosimportshutilpath='../sheet/'isExists=os.path.exists(path)#判断目录是否存在ifnotisExists:#如果目录不存在,则创建一个新目录os.makedirs(path)f=xlwt.Workbook()#创建一个工作簿sheet1=f.add_sheet(u'scorestatistics',cell_overwrite_ok=True)mdict={"monkey":{"writing":80,"reading":60,"speaking":70,"listening":60},"grape":{"writing":100,"reading":80,"speaking":70,"listening":60}}sheet1.write(0,0,u'成绩统计')sheet1.write(1,0,u'书法成绩')sheet1.write(2,0,u'阅读成绩')sheet1.write(3,0,u'speechscore')sheet1.write(4,0,u'listeningscore')temp=['writing','reading','speaking','listening']forpos,nameinenumerate(mdict):sheet1.write(0,pos+1,name)forp,vinenumerate(temp):sheet1.write(p+1,pos+1,mdict[name][v])sheet1.write(5,0,u'总分统计')foriinrange(len(mdict)):forstr=chr(65+i+1)+'2+'+chr(65+i+1)+'3+'+chr(65+i+1)+'4+'+chr(65+i+1)+'5'printforstrsheet1.write(5,i+1,xlwt.Formula(forstr))f.save('scorestatistics')shutil.move(u'scorestatistics',path)你在学习Python的路上肯定会遇到困难,别慌,我这里有一套学习方法学习资料,40+电子书,800+教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会!https://shimo.im/docs/JWCghr8...《Python学习资料》关注公众号【Python圈】,每天送优质文章
