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("p_w_upload; 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报表。
















