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 socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
python处理Excel xlrd的简单使用
Sep 12 Python
Python探索之pLSA实现代码
Oct 25 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
python中Django文件上传方法详解
Aug 05 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
用python开发一款操作MySQL的小工具
May 12 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/07/05 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
python中实现php的var_dump函数功能
2015/01/21 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python制作微博图片爬取工具
2021/01/16 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
医学毕业生自荐信
2013/10/11 职场文书
公务员个人自我评价分享
2013/11/06 职场文书
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
工作保证书范文
2014/04/29 职场文书
学雷锋宣传标语
2014/06/25 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
企业安全生产检查制度
2015/08/06 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书