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 MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
python之消除前缀重命名的方法
Oct 21 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
Django后端按照日期查询的方法教程
Feb 28 Python
python实现Thrift服务端的方法
Apr 20 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
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
React实现轮播效果
2020/08/25 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
低版本中Python除法运算小技巧
2015/04/05 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
车辆维修工自我评价怎么写
2013/09/20 职场文书
服装设计行业个人的自我评价
2013/12/20 职场文书