#!/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生成数据报表的更多相关文章

  1. mysql利用MySQLWorkbench生成数据表之间的关系图

    先看结果,默认是展开的,我手动把表折叠了 那么如何实现呢 先点击这里 然后通过向导来创建即可,一直到finish就行了

  2. excel生成数据地图

    在数据分析过程中,图表是一个十分重要的部分,通过图表可以清晰明了的说明一些数字特征.在众多数据分析图表中,数据地图是常用的一中分析图.在一般的数据分析中,excel已经可以满足绝大部分功能.在本文中, ...

  3. 利用TPC-H为MYSQL生成数据

    ## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...

  4. 利用c#+jquery+echarts生成统计报表(附源代码)

    背景: 因为最近项目要生成报表,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.百度echarts简介请参考 http://echarts.baidu.com/ 虽然echarts功能强 ...

  5. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  6. Selenium(十一)使用EXCEL读取用户数据和生成测试报表

    1.下载两个模块 2.xlrd的使用方法 3.使用excel获取数据 在userdata文件中增加代码: login.py: 4.使用excel生成测试报表 举例: 在log_module中定义函数: ...

  7. 【Python】利用豆瓣短评数据生成词云

    在之前的文章中,我们获得了豆瓣爬取的短评内容,汇总到了一个文件中,但是,没有被利用起来的数据是没有意义的. 前文提到,有一篇微信推文的关于词云制作的一个实践记录,准备照此试验一下. 思路分析 读文件 ...

  8. 动态生成RDLC报表

    前段时间,做了RDLC报表,主要是三块功能: 1.从DataGrid提取(包括最新的增删改)的数据,自动生成对应的RDLC报表文件(以流的形式驻存在内存中),用ReportViewer类来展示.打印. ...

  9. TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台

    本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...

随机推荐

  1. Bridge(桥接)模式

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度 ...

  2. freemark生成静态网页乱码问题

    输出流问题:修改Writer如下: OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(dir), &quo ...

  3. java 进销存 crm 客户管理 库存管理 商户管理 springmvc SSM 项目

    系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM ...

  4. 【Dubbo源码阅读系列】之远程服务调用(上)

    今天打算来讲一讲 Dubbo 服务远程调用.笔者在开始看 Dubbo 远程服务相关源码的时候,看的有点迷糊.后来慢慢明白 Dubbo 远程服务的调用的本质就是动态代理模式的一种实现.本地消费者无须知道 ...

  5. ORA-27300: OS system dependent operation:sendmsg failed with status: 105 ORA-27301: OS failure message: No buffer space available

    早上查看数据库alert日志,发现如下ORA-报错: kgxpvfynet: mtype: 61 process 6460 failed because of a resource problem i ...

  6. Qt5显示中文字符

    在cpp文件或.h文件中顶行输入: #pragma execution_character_set("utf-8")

  7. hubilder 打包app ios高版本不支持问题

    <script type="text/javascript"> document.addEventListener('plusready', function(){ v ...

  8. vue 创建项目的命令

    1 cmd   创建项目 找到指定目录 vue create test   或   vue ui  (可视化创建)推荐 ---------------------------------------- ...

  9. laravel5.5源码阅读草稿——路由

    laravel 里的路由是由RouteServiceProvider提供的,其中的boot方法为启动项,调用了父类的boot方法. RouteServiceProvider中的boot方法设置了自己与 ...

  10. Linux学习-计算机基础

    Linux 学习-计算机基础 一.描述计算机的组成及其功能. 计算机系统是由硬件(Hardware)和软件(Software )两部分组成. 硬件: 从硬件基本结构上来讲,计算机是由运算器.控制器.存 ...