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编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
详解在Python中处理异常的教程
May 24 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
Oct 29 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
学python爬虫能做什么
Jul 29 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 Python
python绘制箱型图
Apr 27 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/04/11 PHP
基于php split()函数的用法详解
2013/06/05 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
js Math 对象的方法
2013/09/01 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
python实现2014火车票查询代码分享
2014/01/10 Python
Python常用内置函数总结
2015/02/08 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
详解python中@的用法
2019/03/27 Python
selenium+python环境配置教程详解
2019/05/28 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python带参数打包exe及调用方式
2019/12/21 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
什么是Remote Module
2016/06/10 面试题
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
端午节活动总结
2014/08/26 职场文书
高一作文之乐趣
2019/11/21 职场文书