博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用xlsxwriter生成数据报表
阅读量:5337 次
发布时间:2019-06-15

本文共 9014 字,大约阅读时间需要 30 分钟。

 
#!/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

  

转载于:https://www.cnblogs.com/heweiblog/p/7779430.html

你可能感兴趣的文章
BBS论坛(十六)
查看>>
android程序打包keystore
查看>>
COMP30023 Computer System
查看>>
POJ1845:Sumdiv(求因子和+逆元+质因子分解)好题
查看>>
mount --bind 的妙用
查看>>
linux修改主机名的方法
查看>>
计算两个时间戳之间相差的时间
查看>>
微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现
查看>>
k8s之nginx-ingress、 Daemonset实现生产案例
查看>>
adb服务启动失败处理命令
查看>>
Dalvik虚拟机
查看>>
20145335郝昊《网络攻防》恶意代码分析
查看>>
纪念逝去的岁月——C++实现一个栈(使用类模板)
查看>>
vim 配置 设置搜索 高亮
查看>>
Android webView 支持缩放及自适应屏幕
查看>>
字典树模板/ac自动机模板
查看>>
前端获取文件的sha1值
查看>>
【翻译】打印RichTextBox内容:(寻找空闲打印机)
查看>>
测试思想-流程规范 SVN代码管理与版本控制
查看>>
Jmeter 测试结果分析之聚合报告简介
查看>>