Python GAE、Django导出Excel的方法

 更新时间:2008年11月24日 20:41:34   作者:  
在Python中操作Excel的方法可以通过COM,最常用的跨平台的方法是使用pyExcelerator,pyExcelerator的使用方法可以参考limodou的《使用pyExcelerator来读写Excel文件》。
但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集合add()函数使用详解

    Python集合add()函数使用详解

    python中add()方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作,本文将给大家介绍一下Python集合add()函数使用方法,感兴趣的小伙伴跟着小编一起来看看吧
    2023-07-07
  • Python内置函数locals和globals对比

    Python内置函数locals和globals对比

    这篇文章主要介绍了Python内置函数locals和globals对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • python 读取视频,处理后,实时计算帧数fps的方法

    python 读取视频,处理后,实时计算帧数fps的方法

    今天小编就为大家分享一篇python 读取视频,处理后,实时计算帧数fps的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 利用PyTorch实现VGG16教程

    利用PyTorch实现VGG16教程

    这篇文章主要介绍了利用PyTorch实现VGG16教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python列表元素删除和remove()方法详解

    Python列表元素删除和remove()方法详解

    这篇文章主要给大家介绍了关于Python列表元素删除和remove()方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python常用内置函数和关键字使用详解

    Python常用内置函数和关键字使用详解

    在Python中有许许多多的内置函数和关键字,它们是我们日常中经常可以使用的到的一些基础的工具,可以方便我们的工作。本文将详细讲解他们的使用方法,需要的可以参考一下
    2022-05-05
  • python中正则的使用指南

    python中正则的使用指南

    正则表达式(RE)是一种小型的、高度专业化的编程语言,它内嵌在Python中,并通过re模块实现。下面我们就来详细探讨下Python中正则表达式的使用
    2016-12-12
  • 详解设计模式中的工厂方法模式在Python程序中的运用

    详解设计模式中的工厂方法模式在Python程序中的运用

    这篇文章主要介绍了设计模式中的工厂方法模式在Python程序中的运用,工厂方法模式主张程序在设计时要可以根据不同的条件生成各种类的实例,需要的朋友可以参考下
    2016-03-03
  • 深入浅析Python代码规范性检测

    深入浅析Python代码规范性检测

    这篇文章主要介绍了Python代码规范性检测,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • django模板结构优化的方法

    django模板结构优化的方法

    这篇文章主要介绍了django模板结构优化的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02

最新评论