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 读写文件的操作代码
Sep 20 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 Python
Jupyter Notebook 安装配置与使用详解
Jan 06 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/09/10 PHP
php随机抽奖实例分析
2015/03/04 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
修复ie8&chrome下window的resize事件多次执行
2011/10/20 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
Python程序设计入门(3)数组的使用
2014/06/16 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python reduce 函数使用详解
2017/12/05 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python接口自动化测试的实现
2020/08/28 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
单位提档介绍信
2014/01/17 职场文书
幼儿教师工作感言
2014/02/14 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
党支部对照检查材料
2014/08/25 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
给老婆的保证书
2015/01/16 职场文书
办公室管理规章制度
2015/08/04 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python