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中os操作文件及文件路径实例汇总
Jan 15 Python
简单理解Python中的装饰器
Jul 31 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
python的re模块使用方法详解
Jul 26 Python
python多线程并发及测试框架案例
Oct 15 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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获取网页内容方法总结
2008/12/04 PHP
yii操作session实例简介
2014/07/31 PHP
PHP多进程编程实例
2014/10/15 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python科学画图代码分享
2017/11/29 Python
Python的多维空数组赋值方法
2018/04/13 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
pygame实现弹球游戏
2020/04/14 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
python飞机大战游戏实例讲解
2020/12/04 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫