首页 > 学院 > 操作系统 > 正文

使用python来实现报表自动化

2024-06-28 16:02:37
字体:
来源:转载
供稿:网友

本文转载于http://blog.csdn.net/coraline_m?viewmode=contents

本篇文章将介绍:

xlwt 常用功能xlrd 常用功能xlutils 常用功能xlwt写Excel时公式的应用xlwt写入特定目录(路径设置)

xlwt Python语言中,写入Excel文件的扩展工具。可以实现指定表单、指定单元格的写入。支持excel03版到excel2013版。使用时请确保已经安装python环境。百度百科


xlrd Python语言中,读取Excel的扩展工具。可以实现指定表单、指定单元格的读取。使用时请确保已经安装python环境。百度百科

NOTICE:

xlwt对Excel只能进行只写操作xrrd对Excel只能进行只读操作

此外,还有xlutils.copy可以实现Excel的复制再编辑。


1.python写excel — xlwt常用功能

A.准备工作

安装xlwt :在终端中输入pip install xlwt或者easy_install xlwt引入xlwt包 :import xlwt # 写11

B.基础教程

新建工作簿&增加sheet: 新建一个工作簿,然后往里添加sheetf = xlwt.Workbook() # 创建工作簿sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)#一个excel表格中可以添加多个sheet123123往sheet中写入内容: sheet.write函数可以传三个参数 第i(参数1)第j(参数2)列存入内容(参数3)sheet1.write(i, j, '第i行第j列存放此内容', style)# 这条语句实现的功能就是往第i行第j列存第三个参数的内容,第四个参数是样式(如字体,背景),可以不传第四个参数。1212合并单元格并写入内容:sheet1.write_merge(x, x + m, y, y + n, '内容', style)# 这条y语句表示将[x:x+m]行[y:y+n]列的矩阵合并成一个单元格。存放第五个参数的内容,同理,style参数可以不传参1212最后使用f.save(‘demo’) 就可以把f保存到excel了

C.实战

我们可以先新建一个工作簿,然后往里添加两个sheet,然后查看效果#coding=utf-8import xlwtf = xlwt.Workbook() # 创建工作簿sheet1 = f.add_sheet(u'葡小萄', cell_overwrite_ok=True)sheet2 = f.add_sheet(u'小葡萄', cell_overwrite_ok=True)f.save('xlwt_tutorial')1234567812345678效果如下,发现表格xlwt_tutorial中有两个sheet。

这里写图片描述

我们开始往sheet中写入内容,不传入style参数 先只使用write函数#coding=utf-8import xlwtf = xlwt.Workbook() # 创建工作簿sheet1 = f.add_sheet(u'葡小萄', cell_overwrite_ok=True)sheet2 = f.add_sheet(u'小葡萄', cell_overwrite_ok=True)row = 0temp = [u'姓名',u'年龄',u'学校',u'专业']for pos,v in enumerate(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')123456789101112131415161718192021123456789101112131415161718192021效果如下,我们建立了一个3行4列的表格。(write函数行和列值都是从0开始的)

这里写图片描述

下面我们使用write_merge函数来合并单元格并写入 在f.save之前添加一行代码sheet1.write_merge(1,2,3,3,u'汉语言文学')11效果如下,将第2-3行第4列合并 这里写图片描述

2.pythonxd读excel —xlrd常用功能

A.准备工作

安装xlrd :在终端中输入pip install xlrd或者easy_install xlrd引入xlrd包 :import xlrd # 读11

B.基础教程&实战

打开一个Excel,然后输出所有sheet的名字#coding=utf-8import xlrdimport unioutf = xlrd.open_workbook(r'xlwt_tutorial')PRint f.sheet_names()12345671234567

输出:[u’葡小萄’, u’小葡萄’]

得到表格里的所有的sheetfor i in range(len(f.sheet_names())): sheet1 = workbook.sheet_by_index(i)1212得到sheet中的内容f = xlrd.open_workbook(r'xlwt_tutorial')sheet1 = f.sheet_by_index(0) #打开第一个sheetsheet2 = f.sheet_by_name(u'小葡萄') #打开名字为小葡萄的sheet#输出sheet的名称,行数,列数print sheet1.name,sheet1.nrows,sheet1.ncolsprint sheet2.name,sheet2.nrows,sheet2.ncols12345671234567

输出为: 葡小萄 3 4 小葡萄 0 0 .

print sheet1.row_values(1) #获取第二行内容print sheet1.col_values(2) #获取第三列内容1212

输出为: [u’葡萄’, 18.0, u’北京电影学院’, u’汉语言文学’] [u’学校’, u’北京电影学院’, u’帝国国王科技大学’] .

# 获取单元格内容print sheet1.cell(1,0).value# 获取单元格内容的数据类型print sheet1.cell(1,1).ctype#ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error12345671234567

输出为: 葡萄 2


3.xlutils 常用功能

A.准备工作

安装xlutils :在终端中输入pip install xlutils或者easy_install xlutils引入xlutils包 :import xlutils 11

B.xlutils中copy功能

我们可能会遇到一个问题,想对一个存储好的Excel进行编辑。 但是xlrd是只读模式,不能进行编写。 而xlwt是只写模式,不能读入Excel文件进行编辑。 我们可以采用xlrd打开一个文档,后采用xlutils中copy功能把文档拷贝,然后进行编辑即可。

import xlrdfrom xlutils.copy import copyf = xlrd.open_workbook(r'xlwt_tutorial')wb = copy(f) # 将f拷贝到wbsheet1 = wb.get_sheet(0) # 打开sheetprint sheet1.namesheet1.write(3,0,'change')wb.save('xlwt_tutorial')12345678910111234567891011

输出为: 葡小萄 输出的表格已经改变。 这里写图片描述PS: 可以看到第二行第四列和第三行第四列合并格已经在COPY的时候被毁掉了。


4.xlwt写Excel时公式的应用

我们写用xlwt写一个表格

#coding=utf-8import xlwtf = 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,"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 = ['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,pos+1,mdict[name][v])f.save('得分统计')1234567891011121314151617181920212212345678910111213141516171819202122

打开表格为: 这里写图片描述

我们现在想做的是统计grape的总分和monkey的总分: 在f.save之前加入代码:

sheet1.write(5,0,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))1234512345

输出为: B2+B3+B4+B5 C2+C3+C4+C5 打开表格为: 这里写图片描述


5.xlwt写入特定目录(路径设置)

由于代码分层的缘故,使代码整体框架优美。 我们需要把文件写入到特定目录下。 但是由于xlwt中没有直接写入到特定目录的函数。 因此使用shutil.move函数来把文件MOV到特定目录下:

#coding=utf-8import xlwtimport osimport shutilpath = '../sheet/'isExists = os.path.exists(path) # 判断目录是否存在if not isExists: # 如果目录不存在,新建目录 os.makedirs(path)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,"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 = ['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,pos+1,mdict[name][v])sheet1.write(5,0,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))f.save('得分统计')shutil.move(u'得分统计', path)1234567891011121314151617181920212223242526272829303132333435363712345678910111213141516171819202122232425262728293031323334353637

效果图: 这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表