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中使用PIL模块处理图像的教程
Apr 29 Python
Python 判断是否为质数或素数的实例
Oct 30 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
通过python顺序修改文件名字的方法
Jul 11 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
Django 视图层(view)的使用
Nov 09 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
对Python函数设计规范详解
Jul 19 Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
用python实现一个简单的验证码
Dec 09 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 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP Reflection API详解
2015/05/12 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
Django 路由系统URLconf的使用
2018/10/11 Python
使用python3实现操作串口详解
2019/01/01 Python
python使用smtplib模块发送邮件
2020/12/17 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
外语系毕业生自荐信范文
2013/12/16 职场文书
进步之星获奖感言
2014/02/22 职场文书
学校校庆演讲稿
2014/05/22 职场文书
2014年安全生产责任书
2014/07/22 职场文书
毕业生找工作求职信
2014/08/05 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
民政局个人整改措施
2014/09/24 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
应聘教师求职信范文
2015/03/20 职场文书
三八节祝酒词
2015/08/11 职场文书
市场营销计划书
2019/04/24 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang