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 相关文章推荐
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
使用python编写监听端
Apr 12 Python
Tesserocr库的正确安装方式
Oct 19 Python
python之消除前缀重命名的方法
Oct 21 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
Python模块 _winreg操作注册表
Feb 05 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 Python
opencv读取视频并保存图像的方法
Jun 04 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
整理一下常见的IE错误
2016/11/18 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
python 模拟登陆github的示例
2020/12/04 Python
幼儿教师考核制度
2014/01/25 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
教育技术职业规划范文
2014/03/04 职场文书
数学系毕业生求职信
2014/05/29 职场文书
实验室标语
2014/06/21 职场文书
艺术节开幕词
2015/01/28 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
《青山不老》教学反思
2016/02/22 职场文书