Python GAE、Django导出Excel的方法
发布时间:2023-02-27 13:59:09
标签:Python,GAE,Django,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报表。


猜你喜欢
- 1.1 什么是Mysql多实例?简单的说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(如 : 3306/3307/3308
- 本文实例讲述了Python机器学习k-近邻算法。分享给大家供大家参考,具体如下:工作原理存在一份训练样本集,并且每个样本都有属于自己的标签,
- PHP程序员玩转Linux系列文章:1.PHP程序员玩转Linux系列-怎么安装使用CentOS2.PHP程序员玩转Linux系列-lnmp
- 正在看的ORACLE教程是:自动备份Oracle数据库。相信为数不少的系统管理员每天都在做着同一样的工作——对数据进行备份。一旦哪一天疏忽了
- asp判断网址格式是否合法代码 具体实现办法见下列代码:<% function checki
- 上次看到别人说写一个类似支付宝支付密码的输入框效果,今天就想自己写了试试看,大体功能是实现了。已实现部分: 1. 焦点会随着输入数值往后推移
- Runtime包GOMAXPROCS()用来设置可以并行计算的CPU核数最大值,并返回之前的值,具体使用方法上一篇有些,这里不再赘述Gosc
- 前言本文主要给大家介绍了利用django-suit模板在管理后台添加自定义的菜单和自定义的页面、设置访问权限的相关内容,分享出来供大家参考学
- 背景最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File R
- 苦逼的前夜昨晚很辛苦,搞到晚上快两点,最后还是没有把python3下的scrapy框架安装起来,后面还把yum这玩意给弄坏了,一直找不到命令
- 本文实例为大家分享了js实现微信聊天效果的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html la
- 前言上个篇章中我们主要介绍了OpenTelemetry的客户端的一些数据生成方式,但是客户端的数据最终还是要发送到服务端来进行统一的采集整合
- 代码如下webfig1.pyfrom flask import Flaskfrom flask import render_template
- 基于之前的文章方法,加入批处理命令即可实现自动备份。只是由于批处理命令中对于备份文件的名字按照时间命名比较特别,所以特别整理一文。1、复制d
- 在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind
- 关于Mysql整理的需要记忆和熟练掌握的内容1. /* 查看操作 */ ----------------------------------
- 本文实例讲述了php实现按照权重随机排序数据的方法。分享给大家供大家参考。具体实现方法如下:<?php /**
- 本文实例讲述了Python基础学习之基本数据结构。分享给大家供大家参考,具体如下:前言相比于PHP,Python同样也是脚本解析语言,所以在
- el-table使用el-select选中后无效需求:表格中一行显示一条数据,数据中的某个属性要展示一列,并且再另一列中用el-select
- 这篇文章主要介绍了Python远程开发环境部署与调试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需