Python GAE、Django导出Excel的方法

时间:2023-02-27 13:59:09 

但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,GAE,Django,Excel
0
投稿

猜你喜欢

  • suggest项目总结-用户体验篇

    2008-01-30 20:04:00
  • python实现录制全屏和选择区域录屏功能

    2022-06-18 01:06:33
  • Python可视化神器pyecharts绘制折线图详情

    2023-01-09 13:57:07
  • 使用python将图片按标签分入不同文件夹的方法

    2021-04-14 05:34:54
  • PHP中的Trait 特性及作用

    2023-11-21 08:04:15
  • vue2.0+webpack环境的构造过程

    2024-05-08 10:42:00
  • MySQL脏读幻读不可重复读及事务的隔离级别和MVCC、LBCC实现

    2024-01-19 00:23:03
  • Python matplotlib读取excel数据并用for循环画多个子图subplot操作

    2021-03-28 19:17:31
  • 对PyQt5中树结构的实现方法详解

    2021-02-07 16:19:20
  • Python在不同场景合并多个Excel的方法

    2021-11-03 02:52:00
  • Python实现圣诞树的多种方法

    2023-07-27 01:02:20
  • asp.net中上传图片文件实现防伪图片水印并写入数据库

    2024-01-17 01:36:49
  • python 将列表中的字符串连接成一个长路径的方法

    2023-04-18 14:06:25
  • python-pyinstaller、打包后获取路径的实例

    2023-10-27 05:02:09
  • Python图像处理之几何变换

    2021-05-05 12:46:39
  • Pytorch中的backward()多个loss函数用法

    2023-11-12 00:19:21
  • 如何用Python画一些简单形状你知道吗

    2021-06-23 06:56:13
  • vue实现二维码扫码功能(带样式)

    2024-04-10 10:31:39
  • Oracle 10G:PL/SQL正规表达式(正则表达式)手册

    2009-07-02 12:33:00
  • conda与jupyter notebook kernel核环境不一致的问题解决

    2021-07-03 15:43:02
  • asp之家 网络编程 m.aspxhome.com