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中Flask框架简单入门实例
Mar 21 Python
介绍Python的Django框架中的QuerySets
Apr 20 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
Python中利用xpath解析HTML的方法
May 14 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
Python如何省略括号方法详解
Mar 21 Python
五分钟带你搞懂python 迭代器与生成器
Aug 30 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
Python异常类型以及处理方法汇总
Jun 05 Python
Python类方法总结讲解
Jul 26 Python
用Python实现屏幕截图详解
Jan 22 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php中的动态调用实例分析
2015/01/07 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
js实现进度条的方法
2015/02/13 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python实现高效求解素数代码实例
2015/06/30 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
python使用turtle库绘制时钟
2020/03/25 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
python实现IOU计算案例
2020/04/12 Python
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
四风问题对照检查材料
2014/09/22 职场文书
政风行风整改报告
2014/11/06 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
2019秋季运动会口号
2019/06/25 职场文书
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis