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中内置的NotImplemented类型的用法
Mar 31 Python
python常见排序算法基础教程
Apr 13 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
python 整数越界问题详解
Jun 27 Python
pybind11和numpy进行交互的方法
Jul 04 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
调整Jupyter notebook的启动目录操作
Apr 10 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伪静态之APACHE篇
2014/06/02 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python读取oracle函数返回值
2016/07/18 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python输出各行命令详解
2018/02/01 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
承认错误的检讨书
2014/01/30 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
父母对孩子说的话
2014/04/12 职场文书
物理教育专业求职信
2014/06/25 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
详解Nginx 工作原理
2021/03/31 Servers
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
Github 使用python对copilot做些简单使用测试
2022/04/14 Python