利用xlsxwriter生成数据报表
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os,xlsxwriter,datetime
import ConfigParser
from send_mail import send_mail path = os.path.split(os.path.realpath(__file__))[0]
###***获取配置文件中的变量
conf_file = path + "\\"+"conf.ini"
config=ConfigParser.ConfigParser()
config.read(conf_file)
class RepotData(object):
def day_file(self,d,project,sheet_list_d,project_list_code):
path = os.path.split(os.path.realpath(__file__))[0]
day_path = path+"\\"+project+"\\"+project_list_code+"\\"
if os.path.exists(day_path) == 0:
os.mkdir(day_path)
re_path = day_path+"\\day\\"
if os.path.exists(re_path) == 0:
os.mkdir(re_path)
# 本月汇总
now_month = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime('%Y-%m')
# 今日汇总
now_day = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime('%Y-%m-%d')
dayYMD = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime('%Y%m%d')
#now = now_day.strftime('%Y-%m-%d') #格式化输出
# 创建表单实例
project_Zn = config.get(project,'projcet_Zn')
CNNAME = config.get(project_list_code,"CNNAME")
file = u"%s(%s)%s.xlsx"%(project_Zn,CNNAME,dayYMD) # 路径+文件名字
work = xlsxwriter.Workbook(re_path+"/"+file)
# 生成工作表,默认表名Sheet1
worksheet1 = work.add_worksheet(u'汇总')
worksheet2 = work.add_worksheet(u'访问数据')
worksheet3 = work.add_worksheet(u'点播数据')
worksheet4 = work.add_worksheet(u'分时段订购')
#worksheet5 = work.add_worksheet(u'订购失败统计')
# 设置单元格格式
#border:边框,align:对齐方式,bg_color:背景颜色,font_size:字体大小,bold:字体加粗
top = work.add_format({'border':1,'align':'center','bg_color':'cccccc','font_size':12,'bold':True})
top_two = work.add_format({'border':1,'align':'center','bg_color':'green','font_size':10,'bold':True})
bold = work.add_format({'bold':True,'border':1,'align':'center','font_size':12})
# 开始写入日报模版
for sheet in sheet_list_d:
if sheet == "worksheet1":
# 设置标题格式,合并
worksheet1.merge_range('A1:P1',u'基础数据',top)
worksheet1.merge_range('Q1:T1',u'分析数据',top)
# 设置单元格长度
worksheet1.set_column("A:S",13)
worksheet1.set_column("H:J",18)
worksheet1.set_column("M:O",18)
TopTwo={
"A2":u"日期",
"B2":u"地市",
"C2":u"订购成功数",
"D2":u"取消数",
"E2":u"订购失败数",
"F2":u"用户访问量",
"G2":u"访问用户数",
"H2":u"新用户访问用户数",
"I2":u"非包月访问用户数",
"J2":u"包月访问用户数",
"K2":u"播放量",
"L2":u"点播用户数",
"M2":u"新用户点播用户数",
"N2":u"非包月点播用户数",
"O2":u"包月点播用户数",
"P2":u"播放时长",
"Q2":u"留存用户数",
"R2":u"包月净增",
"S2":u"订购成功率",
"T2":u"订购转化率"
} for i in TopTwo:
worksheet1.write(i,TopTwo[i],top)
# Module Successfly
# 基础数据
AS=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T']
count = 3
data = d[sheet]
lcyhs=0
for vlue_list in data[0]:
vlue_list = list(vlue_list)
#获取订购成功数
djcgs = vlue_list[2]
#获取订购数
djs = vlue_list[0]
# 订购 净增
djjz = djcgs-vlue_list[3]
vlue_list.append(djjz)
# 订购 成功率
if djcgs == 0 and djs == 0:
djcgl = "0.00%"
vlue_list.append(djcgl)
elif djs == 0:
djcgl = "0.00%"
vlue_list.append(djcgl)
else:
djcgl = str(float("%.2f"%(djcgs/djs))*100)+ "%"
vlue_list.append(djcgl)
# 订购 转化率
if djcgs == 0 and vlue_list[6] == 0:
djzhl = "0.00%"
vlue_list.append(djzhl)
elif vlue_list[6] == 0:
djzhl = "0.00%"
vlue_list.append(djzhl)
else:
djzhl = str(float("%.2f"%(djcgs/vlue_list[6]))*100)+ "%"
vlue_list.append(djzhl)
for index,vlue in enumerate(vlue_list[1:]) :
eval(sheet).write("%s%s"%(AS[index+1],count),vlue,bold)
count = count + 1
eval(sheet).write("%s%s"%(AS[0],count-1),now_day,bold)
worksheet1.write("A3",now_month,bold)
worksheet1.write("B3",u"本月汇总",bold)
#worksheet1.write("Q3",lcyhs,bold)
elif sheet == "worksheet2":
# 访问数据
worksheet2.set_column("A:J",18)
TopTwo={
"A1":u"日期",
"B1":u"地市",
"C1":u"入口标识",
"D1":u"访问总量",
"E1":u"访问用户数",
"F1":u"非包月访问用户数",
"G1":u"包月访问用户数",
"H1":u"订购发起次数",
"I1":u"订购成功数",
"J1":u"订购转化率"
}
for i in TopTwo:
worksheet2.write(i,TopTwo[i],top)
data = d[sheet]
AS = ['A', 'B', 'C', 'D', 'E','F','G','H','I','J']
count = 2
PM = 0
for vlue_list in data[0]:
vlue_list = list(vlue_list)
with open(path+"/accid.ini","r") as f:
ff = f.readlines()
for line in ff:
#print(line.split())
ssid = line.split()[0]
ssid_name = line.split()[1]
if vlue_list[1] == ssid:
vlue_list[1] = ssid_name
continue
for index,vlue in enumerate(vlue_list):
eval(sheet).write("%s%s" % (AS[index + 1], count), vlue, bold)
count = count + 1
eval(sheet).write("%s%s" % (AS[0], count - 1), now_day, bold)
elif sheet == "worksheet3":
# 点播数据 取值 前100名
worksheet3.set_column("A:F",13)
worksheet3.set_column("B:B",20)
TopTwo={
"A1":u"日期",
"B1":u"资源名称",
"C1":u"播放量",
"D1":u"点播用户数",
"E1":u"播放时长",
"F1":u"排名",
}
for i in TopTwo:
worksheet3.write(i,TopTwo[i],top)
# 写入数据
data = d[sheet]
AS = ['A', 'B', 'C', 'D', 'E', 'F']
count = 2
PM = 0
for vlue_list in data[0]:
PM = PM + 1
vlue_list = list(vlue_list)
vlue_list.append(PM)
for index,vlue in enumerate(vlue_list) :
eval(sheet).write("%s%s"%(AS[index+1],count),vlue,bold)
count = count + 1
eval(sheet).write("%s%s"%(AS[0],count-1),now_day,bold) elif sheet == "worksheet4":
worksheet4.set_column("A:G",16)
TopTwo={
"A1":u"日期",
"B1":u"小时",
"C1":u"订购发起次数",
"D1":u"订购成功数",
"E1":u"访问数",
"F1":u"非包月用户数",
"G1":u"订购转化率",
}
for i in TopTwo:
worksheet4.write(i,TopTwo[i],top)
data = d[sheet]
AS = ['A', 'B', 'C', 'D', 'E', 'F','G']
count = 2
for vlue_list in data[0]:
vlue_list = list(vlue_list)
# if vlue_list[1] == 0 and vlue_list[3] == 0:
# djzhl = 0
# vlue_list.append(djzhl)
# elif vlue_list[3] == 0:
# djzhl = "0"
# vlue_list.append(djzhl)
# else:
# djzhl = str(float("%.2f" % (vlue_list[1] / vlue_list[3])) * 100) + "%"
# vlue_list.append(djzhl)
for index, vlue in enumerate(vlue_list):
eval(sheet).write("%s%s" % (AS[index + 1], count), vlue, bold)
count = count + 1
eval(sheet).write("%s%s" % (AS[0], count - 1), now_day, bold)
work.close()
return re_path+file,file
利用xlsxwriter生成数据报表的更多相关文章
- mysql利用MySQLWorkbench生成数据表之间的关系图
先看结果,默认是展开的,我手动把表折叠了 那么如何实现呢 先点击这里 然后通过向导来创建即可,一直到finish就行了
- excel生成数据地图
在数据分析过程中,图表是一个十分重要的部分,通过图表可以清晰明了的说明一些数字特征.在众多数据分析图表中,数据地图是常用的一中分析图.在一般的数据分析中,excel已经可以满足绝大部分功能.在本文中, ...
- 利用TPC-H为MYSQL生成数据
## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...
- 利用c#+jquery+echarts生成统计报表(附源代码)
背景: 因为最近项目要生成报表,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.百度echarts简介请参考 http://echarts.baidu.com/ 虽然echarts功能强 ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- Selenium(十一)使用EXCEL读取用户数据和生成测试报表
1.下载两个模块 2.xlrd的使用方法 3.使用excel获取数据 在userdata文件中增加代码: login.py: 4.使用excel生成测试报表 举例: 在log_module中定义函数: ...
- 【Python】利用豆瓣短评数据生成词云
在之前的文章中,我们获得了豆瓣爬取的短评内容,汇总到了一个文件中,但是,没有被利用起来的数据是没有意义的. 前文提到,有一篇微信推文的关于词云制作的一个实践记录,准备照此试验一下. 思路分析 读文件 ...
- 动态生成RDLC报表
前段时间,做了RDLC报表,主要是三块功能: 1.从DataGrid提取(包括最新的增删改)的数据,自动生成对应的RDLC报表文件(以流的形式驻存在内存中),用ReportViewer类来展示.打印. ...
- TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台
本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...
随机推荐
- Vue04——vue自定义事件、Router、Vue-cli、发布上线
一.Vue的自定义事件 点击任何一个按钮,按钮本身计数累加,但是每点击三个按钮中的一个,totalCounter 都要累加. <body> <div id="app&quo ...
- android TextView里边实现图文混配效果
做的游戏攻略中的图文载入已经用TextView实现.但看到网易新闻里的内容.点击图片能够调到一个新的Activity ,感觉也像Textview 实现的,但不知道怎么弄,想想能够通过动态载入Textv ...
- Mvc+Hui+SqlSugar+Autofac+NLog+T4 架构设计(一)
一.前言 作为小菜鸟第一次写博客的我还有点小激动,最近开始打算着手写一个属于自己架构.算下来差不多最近花一周多的下班时间了来写这个框架,本来想整体架构开发完成测试完成后才写博客,怕自己没时间或失去动力 ...
- 05_Dockerfile实战(上)
在上一章我们介绍了docker镜像的概念,并且介绍了构建镜像的两种方式 使用docker commit命令提交创建的容器. 使用Dockerfile文件和docker build命令,这种更为推荐和常 ...
- Mac 模拟慢速网络
作为开发者,为了提升用户体验,有时需要模拟不同环境的网络.Mac环境下模拟慢速网络可以使用苹果官方提供的工具:Network Link Conditioner. 1.点击苹果开发者网站提供的下载页面, ...
- 仿手机iPhone QQ消息小红点动画1
前言 偶然发现iPhone QQ 显示消息条数的小红点可以响应动作事件,也有人问我这样的动画该怎么做,这里就把实现的思路简单的描述一下.在实现的过程中,同样发现该功能并没有看到的那么简单,要做一个完备 ...
- ztz11的noip模拟赛T1:愤怒的XiaoX
链接: https://www.luogu.org/problemnew/show/U47231 思路: 这道题其实就是一道双Lazy线段树裸题 因为我们知道,当k一定时,取反偶数次最后k位等于不取反 ...
- linux下安装protobuf及cmake编译
一.protobuf 安装 protobuf版本:2.6.1 下载地址:https://github.com/google/protobuf/archive/v2.6.1.zip 解压之后进入目录 修 ...
- javascript知识点杂记
for(var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); //输出10个10,因为setTimeout方法是异步 ...
- 百度地图热力图--批量地址转换应用(基于百度api)
需求:把外卖订餐地址做个用户分布热力图 思路分析:第一步去百度地图api开放平台找例子 http://lbsyun.baidu.com/jsdemo.htm#c1_15 首先从百度API的demo例子 ...