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 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Python匹配中文的正则表达式
May 11 Python
django 创建过滤器的实例详解
Aug 14 Python
Python3 replace()函数使用方法
Mar 19 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
eclipse创建python项目步骤详解
May 10 Python
基于Python安装pyecharts所遇的问题及解决方法
Aug 12 Python
python字符串替换re.sub()方法解析
Sep 18 Python
python自动点赞功能的实现思路
Feb 26 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
Python办公自动化PPT批量转换操作
Sep 15 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
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
JS input 数字验证代码
2009/07/30 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Python新手学习装饰器
2020/06/04 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
影视制作岗位职责
2013/12/04 职场文书
二手书店创业计划书
2014/01/16 职场文书
运动会跳远广播稿
2014/02/04 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
爱的教育读书笔记
2015/06/26 职场文书
《将心比心》教学反思
2016/02/23 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python