Python GAE、Django导出Excel的方法
发布时间:2020-12-16 19:46:06 所属栏目:Python 来源:网络整理
导读:但GAE、Django并没有直接将pyExcelerator导出为Excel的方法。我的思路是先用把数据导入到Workbook和Worksheet中,如果存为文件可以直接调用Workbook的save方法,但GAE不支持本地文件操作,即使图片也只能存放在DataStore中,但我们可以类似于返回图片的方法,
但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,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报表。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |