您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
三六零分类信息网 > 澳门分类信息网,免费分类信息发布

Python GAE、Django导出Excel的方法

2026/4/19 17:34:45发布4次查看
但gae、django并没有直接将pyexcelerator导出为excel的方法。我的思路是先用把数据导入到workbook和worksheet中,如果存为文件可以直接调用workbook的save方法,但gae不支持本地文件操作,即使图片也只能存放在datastore中,但我们可以类似于返回图片的方法,直接将excel的二进制流返回给浏览器。这就需要修改一下workbook的代码,加入返回二进制流的方法,我给他取的名字是savestream,在savestream中再次调用compounddoc.xlsdoc的savestream方法,也是自己增加的。代码如下:
workbook的savestream:
复制代码 代码如下:
def savestream(self):
import compounddoc
doc = compounddoc.xlsdoc()
return doc.savestream(self.get_biff_data())
compounddoc.xlsdoc的savestream方法:
复制代码 代码如下:
def savestream(self, stream):
# 1. align stream on 0x1000 boundary (and therefore on sector boundary)
padding = '\x00' * (0x1000 - (len(stream) % 0x1000))
self.book_stream_len = len(stream) + len(padding)
self.__build_directory()
self.__build_sat()
self.__build_header()
s =
s = s + str(self.header)
s = s + str(self.packed_msat_1st)
s = s + str(stream)
s = s + str(padding)
s = s + str(self.packed_msat_2nd)
s = s + str(self.packed_sat)
s = s + str(self.dir_stream)
return s
这样就可以返回excel文件的二进制流了,下面就是如何在用户请求的时候将excel文件返回,我借鉴了php的实现方法,代码如下:
复制代码 代码如下:
class main(webapp.requesthandler):
def get(self):
self.sess = session.session()
t_values['user_id'] = self.sess['userid']
if self.request.get('export') == 'excel':
wb = workbook()
ws = wb.add_sheet(u'统计报表')
#表头
font0 = font()
font0.bold = true
font0.height = 12*20;
styletitle = xfstyle()
styletitle.font = font0
ws.write(0, 0, u日期:+begintime.strftime('%y-%m-%d') + - + endtime.strftime('%y-%m-%d'), styletitle)
#返回excel文件
self.response.headers['content-type'] = application/vnd.ms-execl
self.response.headers['content-disposition'] = str(attachment; filename=%s.xls%t_values['user_id'])
self.response.headers['pragma'] = no-cache
self.response.headers['expires'] = 0
self.response.out.write(wb.savestream())
return
效果可以参见我爱记账网的excel报表。
澳门分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product