2011-08-31 38 views
0

我如何存儲使用pyExcelerator作爲db.BlobProperty()的輸入創建的Excel文件?我如何存儲使用pyExcelerator作爲db.BlobProperty輸入創建的Excel文件()

實際上我需要的是使用taskqueue程序將創建一個excel文件並將其存儲在數據存儲中。並會發送一個鏈接給用戶下載文件。我該怎麼做呢 ?請幫我

數據模型:

class filestore(db.Model): 
    stock_file = db.BlobProperty() 

Python代碼存儲在Excel文件中的數據存儲

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() 

在0KB爲什麼將新的文件,文件大小後?

+0

您可能不需要下載它,因爲您已將其作爲w。最終使它成爲一個self.w,以便在程序中的任何地方看到它。 – Louis

+0

@Louis實際上我需要的是使用taskqueue程序將創建一個excel文件並將其存儲在數據存儲中。並會發送一個鏈接給用戶下載文件。我該怎麼做呢 ?請幫幫我 –

回答

1

如果您的目標是創建Excel文件並將其保存爲blob供以後使用,則需要先將其保存爲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) 
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) 
0

此代碼將文件保存爲blobproperty()中的數據存儲。

import StringIO 

    w = Workbook() 
    ws = w.add_sheet('Hey, Dude') 
    ws.write(0, 0, 'Part Number') 

    buffer = StringIO.StringIO() 
    w.save(buffer) 
    contents = buffer.getvalue() 
    mymodel = filestore() 
    mymodel.stock_file = db.Blob(contents) 
    mymodel.put() 
相關問題