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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 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摘要生成函数(无乱码)
2012/02/04 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
php利用header函数下载各种文件
2016/08/24 PHP
PHP对象相关知识总结
2017/04/09 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
js控制table合并具体实现
2014/02/20 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
详解vue axios中文文档
2017/09/12 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python实现浪漫的烟花秀
2019/01/30 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
浅析python中的del用法
2020/09/02 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
上班离岗检讨书
2014/01/27 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
项目投资建议书
2014/05/16 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
会计专业自荐信范文
2015/03/05 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
Go语言怎么使用变长参数函数
2022/07/15 Golang