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创建和使用字典实例详解
Nov 01 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
Python连接phoenix的方法示例
Sep 29 Python
python中lambda()的用法
Nov 16 Python
python感知机实现代码
Jan 18 Python
Django 多环境配置详解
May 14 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
python为QT程序添加图标的方法详解
Mar 09 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
PyCharm Community安装与配置的详细教程
Nov 24 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数组是否为索引数组的实现方法
2013/06/13 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
Python yield与实现方法代码分析
2018/02/06 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
函授本科自我鉴定
2014/02/04 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
六一儿童节开幕词
2015/01/29 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
python神经网络Xception模型
2022/05/06 Python