title: web2py导出excel文件实现
date: 2018-03-16 11:27:04
tags: [web2py,python,excel]
csv文件导出
项目需要将数据库中的数据导出为文件,csv文件采用","号作为列分隔符,"\n"换行作为行分隔符,易于操作,所以最开始只支持导出为csv文件。
excel文件导出
后来用户需求变动,不仅仅希望能看到数据,还需要进行一些公式计算、格式变换等高级操作,这时csv就远远不能满足了,其次,如果数据中出现了","号,会扰乱数据格式,使得excel在解析csv时数据错误。
于是研究如果扩展web2py,实现excel数据的导出和下载。
例子
def data_history_normal():
search = request.vars['search']
q = ((db.data_paymentform.isvalid ==1)&(db.data_paymentform.finish !=None))
if (search !="") & (search != None):
search = json.loads(search)
for item in search:
if search[item] !="":
if item=="times":
s_t,e_t = search[item].split("::")
s_t = datetime.datetime.strptime(s_t,"%Y-%m-%d %H:%M:%S")
e_t = datetime.datetime.strptime(e_t,"%Y-%m-%d %H:%M:%S")
s_t_str = s_t.strftime("%Y年%m月%d日")
e_t_str = e_t.strftime("%Y年%m月%d日")
q &= ((db.data_paymentform.schooltime >= s_t_str)&(db.data_paymentform.schooltime <= e_t_str))
else:
q &= (db.data_paymentform[item].like("%"+search[item]+"%"))
q &= (db.data_paymentform.payment ==u"代发")
# 获得数据库导出的数据[{},{}]
datas = db(q).select()
############################################
# excel写入 #
############################################
# 创建excel,数据编码格式采用utf-8
ws = Workbook(encoding='utf-8')
# 创建工作sheet,名字为"数据导出"
w = ws.add_sheet(u"数据导出")
# 逐行写入数据
line=0
for item in datas:
# write(行号,列号,内容)
w.write(line,0,item["id"])
w.write(line,1,"id")
line +=1
s = StringIO.StringIO()
# 保存excel文件内容到tringIO
ws.save(s)
s.seek(0)
# 修改http响应头
response.headers['Content-Type'] = 'application/vnd.ms-excel'
response.headers['Content-Disposition'] = 'attachment; filename=test.xls'
# 返回数据
return s.getvalue()
网友评论