python工具之exccel模板生成报表
from Db import Db
from log import log
import xlwt
import xlrd
from xlutils.copy import copy
import sys
import os
from sched import sched
from datetime import datetime
import config sql = '''
''' @sched.scheduled_job('cron', second='', minute='', hour='10,14', id='supplierXlsGen')
# @sched.scheduled_job('cron',second='*/1',id='supplierXlsGen')
def supplierXlsGen():
try:
descfilePath = config.descfilePath + datetime.now().strftime('%Y%m%d_%H%M%S')
if not os.path.exists(descfilePath):
os.mkdir(descfilePath)
# 获取所有模板,对模板进行遍历即可
temlist = os.listdir(sys.path[0] + '/template/')
for tem in temlist:
log.info('开始处理%s' % tem)
# 根据文件名获取供应商id
id = tem.split('.')[0]
db = Db()
# 获取数据源
data = db.query(sql, (id))
if len(data) == 0:
log.info('数据为空,不处理')
continue
xls = xlrd.open_workbook(sys.path[0] + '/template/' + tem)
excel = copy(xls)
sheets = xls.sheets()
# 解决多sheet兼容问题
for tableidx, temtable in enumerate(sheets):
# table = xls.sheets()[0]
# 获取模板取的字段
collist = temtable.row_values(1)
table = excel.get_sheet(tableidx)
for idx, d in enumerate(data):
for i, col in enumerate(collist):
if col != '':
# 判断下数据类型
if type(d[col]) == datetime:
table.write(
idx + 1, i, d[col].strftime('%Y-%m-%d %H:%M:%S'))
else:
table.write(idx + 1, i, d[col])
dateStr = datetime.now().strftime('%Y%m%d_%H%M%S')
# 获取供应商名称
name = db.queryOne(
'SELECT * from qmall_supplier where id=%s', (id))['name']
excel.save(descfilePath + "/%s_%s_%s.xls" % (id, name, dateStr))
log.info('处理结束')
tarfileName = datetime.now().strftime('%Y%m%d_%H%M%S') + '.tar'
os.system('tar -cvPf /mall_image/report/deliverXls/%s %s' %
(tarfileName, descfilePath))
except Exception as e:
log.error(e)
log.info('处理完成')
python工具之exccel模板生成报表的更多相关文章
- 根据模板导出Excel报表并复制模板生成多个Sheet页
因为最近用报表导出比较多,所有就提成了一个工具类,本工具类使用的场景为 根据提供的模板来导出Excel报表 并且可根据提供的模板Sheet页进行复制 从而实现多个Sheet页的需求, 使用本工具类时 ...
- 使用java Apache poi 根据word模板生成word报表
项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一 ...
- 使用FastReport报表工具生成报表PDF文档
在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...
- ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...
- 使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员
一.项目需求 每周从A系统生成一张Excel报表,发送此报表给指定人员,相关人员依据此报表去完成后续的工作. 项目限制: 1.无法通过EDI系统交互的方式从后台读取数据 2.由于公司网络环境限制,不能 ...
- 使用python获取整月每一天的系统监控数据生成报表
1.安装阿里开源监控工具tsar tsar官方网站 wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip --no-c ...
- Python 写了一个批量生成文件夹和批量重命名的工具
Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...
- python/数据库操作补充—模板—Session
python/数据库操作补充—模板—Session 一.创建一个app目录 在models.py只能类进行进行创建表 class Foo: xx= 字段(数据库数据类型) 字段类型 字符串 Email ...
- 使用T4模板生成不同部署环境下的配置文件
在开发企业级应用的时候,通常会有不同的开发环境,比如有开发环境,测试环境,正式环境,生产环境等.在一份代码部署到不同环境的时候,不同环境的配置文件可能需要根据目标环境不同而不同.比如在开发环境中,数据 ...
随机推荐
- SWT 安装
下载地址: http://www.eclipse.org/windowbuilder/download.php 看到页面如下:选择图片标记的 3.7 (Indigo) update site lin ...
- bzoj4105: [Thu Summer Camp 2015]平方运算
填坑 我不知道怎么算的,但是所有环的LCM数不会超过60 然后用线段树维护这个东西,每个节点记录子树内的循环节 没到循环节的暴力枚举 复杂度是nlogn再乘以循环节长度 #include<cst ...
- POJ3273 Monthly Expense —— 二分
题目链接:http://poj.org/problem?id=3273 Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Tota ...
- codeforces 673D D. Bear and Two Paths(构造)
题目链接: D. Bear and Two Paths time limit per test 2 seconds memory limit per test 256 megabytes input ...
- SPOJ:Easy Factorials(占位)
Finding factorials are easy but they become large quickly that is why Lucky hate factorials. Today h ...
- BZOJ_1812_[Ioi2005]riv_树形DP
BZOJ_1812_[Ioi2005]riv_树形DP Description 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了 ...
- codeforces round 421 div2 补题 CF 820 A-E
A Mister B and Book Reading O(n)暴力即可 #include<bits/stdc++.h> using namespace std; typedef lon ...
- bzoj2431逆序对数列——递推
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2431 考虑新加入一个数i,根据放的位置不同,可以产生0~i-1个新逆序对: 所以f[i][j ...
- Vue.nextTick()的正确使用
Vue异步执行DOM更新.只要观察导数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变,如果同一个watcher被多次触发,只会一次推入到队列中.这种在缓冲时去除重复数据对于避免 ...
- bzoj1996
区间dp 其实我们发现对于一段区间我们是这样构造的,每次我们会向两端放数,这样就有四种情况,且必须满足题意,初值是dp[i][i][0]=1,因为第一个人只有一种放法,不分左右.其实看见dp[i][i ...