python实现报表自动化详解


Posted in Python onNovember 16, 2017

本篇文章将介绍:

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 # 写

B.基础教程

新建工作簿&增加sheet: 新建一个工作簿,然后往里添加sheet

f = xlwt.Workbook() # 创建工作簿
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)
#一个excel表格中可以添加多个sheet

往sheet中写入内容: sheet.write函数可以传三个参数
第i(参数1)第j(参数2)列存入内容(参数3)

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')
就可以把f保存到excel了
C.实战

我们可以先新建一个工作簿,然后往里添加两个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。

python实现报表自动化详解

我们开始往sheet中写入内容,不传入style参数

先只使用write函数

#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)

row = 0
temp = [u'姓名',u'年龄',u'学校',u'专业']
for pos,v in enumerate(temp):
 sheet1.write(row,pos,v)
row += 1
sheet1.write(row,0,u'葡萄')
sheet1.write(row,1,18)
sheet1.write(row,2,u'北京电影学院')
row += 1
sheet1.write(row,0,u'椰子')
sheet1.write(row,1,20)
sheet1.write(row,2,u'帝国国王科技大学')

f.save('xlwt_tutorial')

效果如下,我们建立了一个3行4列的表格。(write函数行和列值都是从0开始的)

python实现报表自动化详解

下面我们使用write_merge函数来合并单元格并写入

在f.save之前添加一行代码

sheet1.write_merge(1,2,3,3,u'汉语言文学')

效果如下,将第2-3行第4列合并

python实现报表自动化详解

2.pythonxd读excel —xlrd常用功能

A.准备工作

安装xlrd :在终端中输入pip install xlrd或者easy_install xlrd
引入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

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

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

输出为:
[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 error

输出为:
葡萄
2

3.xlutils 常用功能

A.准备工作

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

import xlutils

B.xlutils中copy功能

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

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,0,'change')

wb.save('xlwt_tutorial')

输出为:
葡小萄
输出的表格已经改变。

python实现报表自动化详解

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,"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('得分统计')

打开表格为:

python实现报表自动化详解

我们现在想做的是统计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))

输出为:
B2+B3+B4+B5
C2+C3+C4+C5
打开表格为:

python实现报表自动化详解

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

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

#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'得分统计', 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)

效果图:

python实现报表自动化详解

总结

以上就是本文关于python实现报表自动化详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。

Python 相关文章推荐
python Django批量导入不重复数据
Mar 25 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
django js实现部分页面刷新的示例代码
May 28 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
Python生成一个迭代器的实操方法
Jun 18 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
如何提高python 中for循环的效率
Apr 15 Python
记一次django内存异常排查及解决方法
Aug 07 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 #Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 #Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 #Python
用不到50行的Python代码构建最小的区块链
Nov 16 #Python
python内置函数:lambda、map、filter简单介绍
Nov 16 #Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 #Python
高质量Python代码编写的5个优化技巧
Nov 16 #Python
You might like
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
JAVASCRIPT keycode总结
2009/02/04 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
python3中sys.argv的实例用法
2020/04/24 Python
Django models文件模型变更错误解决
2020/05/11 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
课改先进个人汇报材料
2014/01/26 职场文书
校园之星获奖感言
2014/01/29 职场文书
新闻编辑求职信
2014/07/13 职场文书
硕士学位论文评语
2014/12/31 职场文书
签约仪式致辞
2015/07/30 职场文书
html中两种获取标签内的值的方法
2022/06/16 jQuery
详解CSS3浏览器兼容
2022/12/24 HTML / CSS