python实现报表自动化详解
本篇文章将介绍: xlwt 常用功能 xlwt Python语言中,写入Excel文件的扩展工具。可以实现指定表单、指定单元格的写入。支持excel03版到excel2013版。使用时请确保已经安装python环境 xlrd Python语言中,读取Excel的扩展工具。可以实现指定表单、指定单元格的读取。使用时请确保已经安装python环境。 NOTICE: xlwt对Excel只能进行只写操作 1.python写excel ― xlwt常用功能 A.准备工作 安装xlwt :在终端中输入pip install xlwt或者easy_install xlwt import xlwt # 写 B.基础教程 新建工作簿&增加sheet: 新建一个工作簿,然后往里添加sheet f = xlwt.Workbook() # 创建工作簿 sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #一个excel表格中可以添加多个sheet 往sheet中写入内容: sheet.write函数可以传三个参数 sheet1.write(i,j,'第i行第j列存放此内容',style) # 这条语句实现的功能就是往第i行第j列存第三个参数的内容,第四个参数是样式(如字体,背景),可以不传第四个参数。 合并单元格并写入内容: sheet1.write_merge(x,x + m,y,y + n,'内容',style) # 这条y语句表示将[x:x+m]行[y:y+n]列的矩阵合并成一个单元格。存放第五个参数的内容,同理,style参数可以不传参 最后使用f.save(‘demo') 我们可以先新建一个工作簿,然后往里添加两个sheet,然后查看效果 #coding=utf-8 import xlwt f = xlwt.Workbook() # 创建工作簿 sheet1 = f.add_sheet(u'葡小萄',cell_overwrite_ok=True) sheet2 = f.add_sheet(u'小葡萄',cell_overwrite_ok=True) f.save('xlwt_tutorial') 效果如下,发现表格xlwt_tutorial中有两个sheet。 我们开始往sheet中写入内容,不传入style参数 先只使用write函数 #coding=utf-8 import xlwt f = xlwt.Workbook() # 创建工作簿 sheet1 = f.add_sheet(u'葡小萄',cell_overwrite_ok=True) row = 0 temp = [u'姓名',u'年龄',u'学校',u'专业'] for pos,v in enumerate(temp): sheet1.write(row,pos,v) row += 1 sheet1.write(row,u'葡萄') sheet1.write(row,1,18) sheet1.write(row,2,u'北京电影学院') row += 1 sheet1.write(row,u'椰子') sheet1.write(row,20) sheet1.write(row,u'帝国国王科技大学') f.save('xlwt_tutorial') 效果如下,我们建立了一个3行4列的表格。(write函数行和列值都是从0开始的) 下面我们使用write_merge函数来合并单元格并写入 在f.save之前添加一行代码 sheet1.write_merge(1,3,u'汉语言文学') 效果如下,将第2-3行第4列合并 2.pythonxd读excel ―xlrd常用功能 A.准备工作 安装xlrd :在终端中输入pip install xlrd或者easy_install xlrd import xlrd # 读 B.基础教程&实战 打开一个Excel,然后输出所有sheet的名字 #coding=utf-8 import xlrd import uniout f = xlrd.open_workbook(r'xlwt_tutorial') print f.sheet_names() 输出:[u'葡小萄',u'小葡萄'] 得到表格里的所有的sheet for i in range(len(f.sheet_names())): sheet1 = workbook.sheet_by_index(i) 得到sheet中的内容 f = xlrd.open_workbook(r'xlwt_tutorial') sheet1 = f.sheet_by_index(0) #打开第一个sheet sheet2 = f.sheet_by_name(u'小葡萄') #打开名字为小葡萄的sheet #输出sheet的名称,行数,列数 print sheet1.name,sheet1.nrows,sheet1.ncols print sheet2.name,sheet2.nrows,sheet2.ncols 输出为: print sheet1.row_values(1) #获取第二行内容 print sheet1.col_values(2) #获取第三列内容 输出为: # 获取单元格内容 print sheet1.cell(1,0).value # 获取单元格内容的数据类型 print sheet1.cell(1,1).ctype #ctype : 0 empty,1 string,2 number,3 date,4 boolean,5 error 输出为: 3.xlutils 常用功能 A.准备工作 安装xlutils :在终端中输入pip install xlutils或者easy_install xlutils import xlutils B.xlutils中copy功能 我们可能会遇到一个问题,想对一个存储好的Excel进行编辑。 import xlrd from xlutils.copy import copy f = xlrd.open_workbook(r'xlwt_tutorial') wb = copy(f) # 将f拷贝到wb sheet1 = wb.get_sheet(0) # 打开sheet print sheet1.name sheet1.write(3,'change') wb.save('xlwt_tutorial') 输出为: PS: 可以看到第二行第四列和第三行第四列合并格已经在COPY的时候被毁掉了。 4.xlwt写Excel时公式的应用 我们写用xlwt写一个表格 #coding=utf-8 import xlwt f = xlwt.Workbook() # 创建工作簿 sheet1 = f.add_sheet(u'得分统计',cell_overwrite_ok=True) mdict = {"monkey":{"writing":80,"reading":60,"speaking":70,"listening":60},"grape":{"writing":100,"reading":80,"listening":60}} sheet1.write(0,u'得分统计') sheet1.write(1,u'书法得分') sheet1.write(2,u'阅读得分') sheet1.write(3,u'演讲得分') sheet1.write(4,u'听力得分') temp = ['writing','reading','speaking','listening'] for pos,name in enumerate(mdict): sheet1.write(0,pos+1,name) for p,v in enumerate(temp): sheet1.write(p+1,mdict[name][v]) f.save('得分统计') 打开表格为: 我们现在想做的是统计grape的总分和monkey的总分: sheet1.write(5,u'总分统计') for i in range(len(mdict)): forstr = chr(65+i+1)+'2+'+chr(65+i+1)+'3+'+chr(65+i+1)+'4+'+chr(65+i+1)+'5' print forstr sheet1.write(5,i+1,xlwt.Formula(forstr)) 输出为: 5.xlwt写入特定目录(路径设置) 由于代码分层的缘故,使代码整体框架优美。 #coding=utf-8 import xlwt import os import shutil path = '../sheet/' isExists = os.path.exists(path) # 判断目录是否存在 if not isExists: # 如果目录不存在,新建目录 os.makedirs(path) f = xlwt.Workbook() # 创建工作簿 sheet1 = f.add_sheet(u'得分统计',mdict[name][v]) sheet1.write(5,xlwt.Formula(forstr)) f.save('得分统计') shutil.move(u'得分统计',path) 效果图: 总结 以上就是本文关于python实现报表自动化详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站: MySQL数据库设计之利用Python操作Schema方法详解 Python文件的读写和异常代码示例 python中使用xlrd、xlwt操作excel表格详解 如有不足之处,欢迎留言指出。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |