zoukankan      html  css  js  c++  java
  • python工具之exccel模板生成报表

     1 from Db import Db
     2 from log import log
     3 import xlwt
     4 import xlrd
     5 from xlutils.copy import copy
     6 import sys
     7 import os
     8 from sched import sched
     9 from datetime import datetime
    10 import config
    11 
    12 sql = '''
    13 '''
    14 
    15 
    16 @sched.scheduled_job('cron', second='0', minute='0', hour='10,14', id='supplierXlsGen')
    17 # @sched.scheduled_job('cron',second='*/1',id='supplierXlsGen')
    18 def supplierXlsGen():
    19     try:
    20         descfilePath = config.descfilePath + datetime.now().strftime('%Y%m%d_%H%M%S')
    21         if not os.path.exists(descfilePath):
    22             os.mkdir(descfilePath)
    23         # 获取所有模板,对模板进行遍历即可
    24         temlist = os.listdir(sys.path[0] + '/template/')
    25         for tem in temlist:
    26             log.info('开始处理%s' % tem)
    27             # 根据文件名获取供应商id
    28             id = tem.split('.')[0]
    29             db = Db()
    30             # 获取数据源
    31             data = db.query(sql, (id))
    32             if len(data) == 0:
    33                 log.info('数据为空,不处理')
    34                 continue
    35             xls = xlrd.open_workbook(sys.path[0] + '/template/' + tem)
    36             excel = copy(xls)
    37             sheets = xls.sheets()
    38             # 解决多sheet兼容问题
    39             for tableidx, temtable in enumerate(sheets):
    40                 # table = xls.sheets()[0]
    41                 # 获取模板取的字段
    42                 collist = temtable.row_values(1)
    43                 table = excel.get_sheet(tableidx)
    44                 for idx, d in enumerate(data):
    45                     for i, col in enumerate(collist):
    46                         if col != '':
    47                             # 判断下数据类型
    48                             if type(d[col]) == datetime:
    49                                 table.write(
    50                                     idx + 1, i, d[col].strftime('%Y-%m-%d %H:%M:%S'))
    51                             else:
    52                                 table.write(idx + 1, i, d[col])
    53             dateStr = datetime.now().strftime('%Y%m%d_%H%M%S')
    54             # 获取供应商名称
    55             name = db.queryOne(
    56                 'SELECT * from qmall_supplier where id=%s', (id))['name']
    57             excel.save(descfilePath + "/%s_%s_%s.xls" % (id, name, dateStr))
    58         log.info('处理结束')
    59         tarfileName = datetime.now().strftime('%Y%m%d_%H%M%S') + '.tar'
    60         os.system('tar -cvPf /mall_image/report/deliverXls/%s %s' %
    61                   (tarfileName, descfilePath))
    62     except Exception as e:
    63         log.error(e)
    64     log.info('处理完成')       

    有追求,才有动力!

    向每一个软件工程师致敬!

    by wujf

    mail:921252375@qq.com

  • 相关阅读:
    圣诞快乐有感
    今天填补了尹大神的一个小瑕疵 被他戏称接锅侠 有感
    统计js数组中奇数元素的个数
    PHP实现一致性哈希算法
    寻找一组数的最大值并统计出现次数
    得知尹大神最后一天在岗位工作明天即将离开有感
    小物件之checkbox复选框
    处理特殊格式的GET传参
    vim分屏
    【学习笔记】Docker基础
  • 原文地址:https://www.cnblogs.com/wujf/p/8043923.html
Copyright © 2011-2022 走看看