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之禅》中对于Python编程过程中的一些建议
Apr 03 Python
python写日志封装类实例
Jun 28 Python
详解Python中的Descriptor描述符类
Jun 14 Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
用Python3创建httpServer的简单方法
Jun 04 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
教你怎么用Python监控愉客行车程
Apr 29 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
一个php作的文本留言本的例子(二)
2006/10/09 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
Python算术运算符实例详解
2017/05/31 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
Python 求向量的余弦值操作
2021/03/04 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
如何写一封打动人心的求职信
2014/02/17 职场文书
合作意向书模板
2014/03/31 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
详解MySQL的半同步
2021/04/22 MySQL
Log4j.properties配置及其使用
2021/08/02 Java/Android
Nginx反向代理学习实例教程
2021/10/24 Servers
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL