使用python来实现报表自动化~

使用python来实现报表自动化~

本篇文章将介绍:

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

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


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

NOTICE:

  • xlwt对Excel只能进行只写操作
  • xlrd对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。

这里写图片描述

  • 我们开始往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开始的)

这里写图片描述

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

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

输出为:
葡小萄
输出的表格已经改变。
这里写图片描述
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('得分统计')

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

我们现在想做的是统计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
打开表格为:
这里写图片描述


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)

效果图:
这里写图片描述

【参考资料】

已标记关键词 清除标记
<strong>课程背景:</strong><span style="color:#333333;">    </span><br /><span style="color:#333333;">企业里面很多系统管理后台,用easyui + highcharts + django 进行后台管理的整合,而这块资料在网上资料甚少,很多有经验的朋友在做这块时候也经常出现各种问题,目前我们老师以前在大数据真实项目中用到这块,现在受一些网友建议单独录制easyui + highcharts + django,希望可以帮助那些同学。视频+技术文档+源码让你看过后马上也可以搭建起来。  </span><br /><span style="color:#333333;">比如现在的友盟 和 百度统计 都是在类似这样的统计,我们会通过2~3个小时左右的课程,让你掌握这样的技术。   </span><br /><br /><strong><span>目标人群:</span></strong><span style="color:#333333;">  </span><br /><span style="color:#333333;">1、初级以上普通开发人员  </span><br /><span style="color:#333333;">2、web开发人员,对python感兴趣同学  </span><br /><span style="color:#333333;">3、对编程感兴趣的同学   </span><br /><br /><strong>课程目录:</strong><span style="color:#333333;">  </span><br /><span style="color:#333333;">01easyui_highcharts_django整合之需求介绍  </span><br /><span style="color:#333333;">02easyui_highcharts_django整合通过pycharm创建项目  </span><br /><span style="color:#333333;">03easyui_highcharts_django整合配置路由显示第一个页面  </span><br /><span style="color:#333333;">04easyui_highcharts_django整合下载easyui资源并且导入到项目里面  </span><br /><span style="color:#333333;">05easyui_highcharts_django整合修改配置文件加载static静态文件  </span><br /><span style="color:#333333;">06easyui_highcharts_django整合对页面进行修改  </span><br /><span style="color:#333333;">07easyui_highcharts_django整合对合并母模板layout  </span><br /><span style="color:#333333;">08easyui_highcharts_django整合添加一个新的业务的代码实现流程  </span><br /><span style="color:#333333;">09easyui_highcharts_django整合highcharts简单介绍  </span><br /><span style="color:#333333;">10easyui_highcharts_django整合highcharts的整合到django里面  </span><br /><span style="color:#333333;">11easyui_highcharts_django整合快速做出另一个业务流程  </span><br /><span style="color:#333333;">12easyui_highcharts_django整合柱状图  </span><br /><span style="color:#333333;">13easyui_highcharts_django后台返回json数据并且展示   </span><br /><span style="color:#333333;">14大数据django后台数据保存到mysql里面  </span><br /><span style="color:#333333;">15大数据django从mysql里面读取数据并显示到页面上面  </span><br /><br /><strong><span>课程环境:</span> </strong><span style="color:#333333;">   </span><br /><span style="color:#333333;">环境:win10,  </span><br /><span style="color:#333333;">python 2.7.13,  </span><br /><span style="color:#333333;">django 1.8.3 ,  </span><br /><span style="color:#333333;">pymsql   </span><br /><br /><strong><span>收获预期:</span></strong><span style="color:#333333;">    </span><br /><span style="color:#333333;">1.使用django开发项目  </span><br /><span style="color:#333333;">2.学会使用easyui框架  </span><br /><span style="color:#333333;">3.学会使用highcharts  </span><br /><span style="color:#333333;">4.easyui_highcharts_django开发后面展示项目   </span><br /><br /><strong>案例截图:</strong><span style="color:#333333;">  </span><br /><img src="https://10.url.cn/qqke_course_info/ajNVdqHZLLBg9jcMU16DOribraDkO2LW4hYpgGiccFiauF0gfaSTT10AOGF67T7JMQp6qkFYXXHsVk/" alt="" /><span style="color:#333333;">  </span><br /><img src="https://10.url.cn/qqke_course_info/ajNVdqHZLLDvU3EX0eOK19y7NCial5M76cbgA0W3Sl5ImSBjL2mmQ4po3HHDsD6TUyBIrsmdib1ac/" alt="" /><span style="color:#333333;">  </span><br /><br /><img src="https://10.url.cn/qqke_course_info/ajNVdqHZLLAAUQuuU3RoYW9ia0HsnyjRaA61piaLs07xRRhjUha8HsCIPk3k5ZzVP4RVLwdskEs8w/" alt="" />
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页