Python GAE、Django导出Excel的方法


Posted in Python onNovember 24, 2008

但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报表。
Python 相关文章推荐
Python网络爬虫出现乱码问题的解决方法
Jan 05 Python
python 容器总结整理
Apr 04 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
python+pandas分析nginx日志的实例
Apr 28 Python
Python实现仿射密码的思路详解
Apr 23 Python
Python实现aes加密解密多种方法解析
May 15 Python
python导入库的具体方法
Jun 18 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
Python类的基础入门知识
Nov 24 #Python
Python 连连看连接算法
Nov 22 #Python
python sqlobject(mysql)中文乱码解决方法
Nov 14 #Python
Python转码问题的解决方法
Oct 07 #Python
Python函数学习笔记
Oct 07 #Python
Python日期操作学习笔记
Oct 07 #Python
wxPython 入门教程
Oct 07 #Python
You might like
咖啡的植物学知识
2021/03/03 咖啡文化
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
web前端开发也需要日志
2010/12/09 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
keras的三种模型实现与区别说明
2020/07/03 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
超市端午节活动方案
2014/01/23 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
雷锋的观后感
2015/06/10 职场文书
生产设备维护保养制度
2015/08/06 职场文书