0

pyExceleratorをdb.BlobProperty()の入力として使用して作成されたExcelファイルを保存するにはどうすればよいですか?

実際に必要なのは、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)) // Storing 0kb file 
     temp_file.put()

新しいファイルを挿入した後、0kbのファイルサイズはなぜですか?

4

2 に答える 2

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)
于 2011-08-31T16:41:01.870 に答える
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()
于 2011-09-01T05:28:57.160 に答える