#!/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. java点滴之MulticastSocket的使用

    一基本概念 该类恰是上文介绍的DatagramSocket的子类. DatagramSocket仅仅同意数据报发送给指定的目标地址,而MulticastSocket能够将数据报以广播的方式发送到多个c ...

  2. maven install web工程时出错

    [WARNING] Error injecting: org.apache.maven.plugin.war.WarMojo java.lang.NoClassDefFoundError: org/a ...

  3. jquery购物车添加功能

    <html> <head> <meta charset="UTF-8"> <title></title> <scr ...

  4. kafka搭建到配置borker集群(项目开发-区块链)

    (以下分享了搭建kafka需要使用到的命令,差不多齐了,这里没有提到kafka-manager ,同学可以在网上自行查找) 最近公司的项目比较紧,先说下使用kafka的用处: 要替代原来 撮合引擎发数 ...

  5. MongoDB基础命令及操作

    MongoDB:NoSQL数据库 MongoDB中的重要指示点 MongoDB中的三要素 数据库 集合 文档 MongoDB中的数据存储是以Bson的形式存储的,Bson是二进制的json,所以看上去 ...

  6. tp5 的nginx配置

    下面简单说明一下tp5运行在nginx上的配置. 原文地址:小时刻个人博客>http://small.aiweimeng.top/index.php/archives/tp5_nginx.htm ...

  7. docker使用(一)

    docker相对于虚拟技术: 更高效的利用系统资源 更快的启动速度 一致的运行环境 持续交付和部署 更加轻松的迁移 更加轻松的维护和扩展 什么是docker镜像,容器: 可以说他就是一个模型,用面向对 ...

  8. SQL注入科普

    技术交流,安全交友联系渔夫”小白“,微信号(xz116035) SQL注入介绍 SQL注入攻击是最为常见的Web应用安全漏洞之一,国外知名安全组织OWASP针对web应用安全漏洞进行了一个排名,SQL ...

  9. 基于EasyX库的贪吃蛇游戏——C语言实现

    接触编程有段时间了,一直想学习怎么去写个游戏来练练手.在看了B站上的教学终于可以自己试试怎么实现贪吃蛇这个游戏了.好了,废话不多说,我们来看看如何用EasyX库来实现贪吃蛇. 一.准备 工具vc++6 ...

  10. C语言/C++编程学习:栈的代码实现之数组方案

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...