我如何将使用pyExcelerator创建的excel文件存储为db.BlobProperty()的输入 [英] How can i store excel file created using pyExcelerator as input for db.BlobProperty()
问题描述
实际上我需要的是使用taskqueue程序将创建一个excel文件并将其存储在数据存储中。并会发送一个链接给用户下载文件。我该怎么做呢 ?请帮助我
数据模型:
class filestore(db.Model ):
stock_file = db.BlobProperty()
用于存储excel文件的Python代码数据存储
from pyExcelerator import *
class MainHandler(webapp.RequestHandler):
def get(self) :
w = Workbook()
ws = w.add_sheet('Hey,Dude')
ws.write(0,0,'Part Number')
self.response。 headers''Content-Type'] ='application / ms-excel'
self.response.headers ['Content-Transfer-Encoding'] ='Binary'
self.response.headers ['Content -disposition'] ='attachment; filename =Test.xls'
temp_file = filestore()
temp_file.stock_file = db.blob(wb.save(self.response.out))//存储0kb文件
temp_file.put()
插入新文件后,文件大小为0kb为什么?如果您的目标是创建一个Excel文件并将其保存为blob供以后使用,则需要先将其保存为一个StringIO文件,然后将其保存为一个StringIO文件对象,而不是像当前所做的那样构造响应。
以下是使用xlwt(pyExcelerator的一个分支)的示例:
import xlwt
file_type ='application / ms-excel'
file_name ='sample.xls'
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('Hey,Dude')
sheet.write(0,0,'Part Number')
file = StringIO.StringIO()
wbk.save(文件)
file.seek(0)
with files.open(file_name,'a')as f:
f.write('%s'%file.getvalue())
文件。 finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)
How can i store excel file created using pyExcelerator as input for db.BlobProperty() ?
Actally what i need is that Using taskqueue program will create a excel file and store it in the datastore. And will send a link to the users to download the file. How do i do this ? Please help me
Datamodel:
class filestore(db.Model):
stock_file = db.BlobProperty()
Python code for storing the excel file in datastore
from pyExcelerator import *
class MainHandler(webapp.RequestHandler):
def get(self):
w = Workbook()
ws = w.add_sheet('Hey, Dude')
ws.write(0, 0, 'Part Number')
self.response.headers['Content-Type'] = 'application/ms-excel'
self.response.headers['Content-Transfer-Encoding'] = 'Binary'
self.response.headers['Content-disposition'] = 'attachment; filename="Test.xls"'
temp_file = filestore()
temp_file.stock_file = db.blob(wb.save(self.response.out)) // Storing 0kb file
temp_file.put()
After inserting new file, file size in 0kb why ?
If your goal is to create an Excel file and save it as a blob for later use you need to first save it as a StringIO object, not construct a response, as you are doing currently.
Here is a sample using xlwt (a fork of pyExcelerator):
import xlwt
file_type = 'application/ms-excel'
file_name = 'sample.xls'
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('Hey, Dude')
sheet.write(0, 0, 'Part Number')
file = StringIO.StringIO()
wbk.save(file)
file.seek(0)
with files.open(file_name, 'a') as f:
f.write('%s' % file.getvalue())
files.finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)
这篇关于我如何将使用pyExcelerator创建的excel文件存储为db.BlobProperty()的输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!