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

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

本篇文章将介绍:

  • 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。

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

效果图:

【参考资料】

时间: 2024-10-16 21:48:31

使用python来实现报表自动化~的相关文章

Python+Django+Ansible Playbook自动化运维项目实战

Python+Django+Ansible Playbook自动化运维项目实战网盘地址:https://pan.baidu.com/s/1bZ1Ju0mld3KLZawdxZ7m6Q 密码: 5k9x备用地址(腾讯微云):https://share.weiyun.com/5E7aUWv 密码:wzfdrn 本课程将带你从项目实践角度出发,围绕自动化资产扫描和发现.Ansible自动化任务执行的内容展开,让运维更简单.更高效,Hold住高薪! 适合人群:如果你是一位运维党,对Python运维自动化

【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!

一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博文 二.Selenium第一篇博文地址: [Selenium01篇]python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作! 三.Selenium之鼠标操作和键盘操作 1.鼠标事件 在webdriver中,鼠标操作的方法封装在 ActionChai

关于Python Fault 管理半自动化心得[一]

最近从码农变成了苦逼的 FC 所谓的FC是Fault Coordinator的简称,是负责协调处理Fault相关的角色.FC的所负责的杂事特别多,很多情况是完全重复的机械化劳动. 在做FC的一个职责是为每个 Fault 添加不同分支的改动表格给开发人员,这样保证所有 Fault 影响到的分支都有相关改动. 在公司龟速的网络下,每个分支的创建是相当的折磨人,而且在Fault特别多的情况下,这个工作量巨大,基本上一下午的时间就没有了.同时每个Fault需要FC来帮忙建立一个Jira Issue来让开

用zabbix生成awstats图表以及通过Python调zabbix API自动化操作

awstats作为一款日志分析软件,功能不错,但是界面过于简单,也没有图表功能,这里我采取了一种变通的方法,将awstats的分析结果(pv.hits(文件数).bandwidth.visits(独立ip))添加到zabbix,并通过zabbix生成趋势图表. 在前两篇文章中,我们队awstats的使用及其工作方式进行了简明扼要的介绍:awstats对每个站点进行分析之后,会生成一个"awstats012016.txt"格式的"数据库"文件:awstats的展示页面

实战:基于Python构建运维自动化平台

导语: 今天与大家一起探讨如何基于Python构建一个可扩展的运维自动化平台,也希望能与大家一起交流,共同成长. 此次分享将通过介绍OMServer.OManager具备的功能.架构设计.模块定制.安全审计.C/S结构的实现等几个方面的内容来展开. 为什么选择Python? 默认安装且跨平台 可读性好且开发效率高 丰富的第三方库(开发框架.各类API.科学计算.GUI等) 社区活跃&众多开发者. Python在腾讯的现状,根据去年内部提交组件语言统计,除去2.3.4前端技术,Python在高级编

我用 Python 和 Twilio 实现自动化选课

大学生都知道那种选课时无课可选的痛苦,而我所在的大学甚至对大部分课程都不提供候补系统.我们每天不得不多次登录查看选课网站.这种机械操作似乎是计算机擅长的事,所以我着手用一些学过的 Python 知识和Twilio API来实现选课自动化 开始阶段 由于大学的课程注册系统需要密码登录,我们打算使用自建的简化版网站.出于演示的目的,CS 101 课程的空余名额将以 1 分钟 1 次的频率在 0 和 1 之间切换. 本项目中我们打算使用一些库来帮助我们.假设你已经安装了pip,使用下面的 pip 命令

Python脚本之——API自动化框架总结

学完了Python脚本接口自动化之后,一直没有对该框架做总结,今天终于试着来做一份总结了. 框架结构如下图: 来说一下每个目录的作用: Configs:该目录下存放的是.conf,.ini文件格式的配置文件;文件里面的内容可以通过封装好的读写配置文件的类去获取. datas:该目录下存放一些测试用例数据,如:Excel libs:存放修改源码后的ddt.py和HTMLTestRunner文档,这个两个文档主要是为了让测试报告看起来更明了 logs: 存放脚本运行的日志文件 reports: 执行

Kettle报表自动化

来自我们牛逼哄哄的东哥的笔记 1. 2. 3. 选择数据库链接 贴报表SQL 4. 文件名:选择路径,excel文件由kettle自动创建,自己只需输入创建文件的名称. 拓展名:后缀写上 5. 此为sheet页名称 6. 根据自己的情况选择不同excel格式 7. 8. 邮件发送分为job和ktr里两种组件,只有转换里的邮件组件才能发送附件. 9. 定义常量数据,这些常量在后面会用到 10. 文件里的系统变量properties 11. 把相应的变量,常量给选上. 12 OK

Python操作Execl 实现自动化填表

任务简述: 表1是一个简单的数据表,共有110行,25列.第1行是表头,例如“负责人”.“事项”.“期限”等. 第2行——第110行是对应的数据,如“张三”.“搬砖头”.“3天”. 想要做的表(表2)是110个表格(就像个人简历一样,放在了一个excel文件中),每个表格共9行,都有固定的格式,如“姓名”“事项”“期限”等,数据与表1一样,但格式与顺序不同,是按个人分类的. 目前的任务就是从表1复制出相应的数据,填到表2里面.如果手工复制粘贴,共计110x25=2750个数据,简直累哭. 所以使