我如何将使用pyExcelerator创建的excel文件存储为db.BlobProperty()的输入 [英] How can i store excel file created using pyExcelerator as input for db.BlobProperty()

查看:227
本文介绍了我如何将使用pyExcelerator创建的excel文件存储为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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆