私は次の方法でスプレッドシートを作成することに慣れています。
wbk = xlwt.Workbook()
earnings_tab = wbk.add_sheet('EARNINGS')
wbk.save(filepath)
ファイルをファイルパスに保存せず、代わりにファイルをダウンロードするユーザーにその場で書き込む方法はありますか?または、それをtmpファイルとして保存してから、ユーザーに提供する必要がありますか?
次の方法のドキュメント.save()
xlwt
を引用するには:
また、などの書き込みメソッドを使用するストリームオブジェクトにすることもできます
StringIO
。この場合、Excelファイルのデータがストリームに書き込まれます。
変更された例:
from io import StringIO # instead of Python 2.x `import StringIO`
f = StringIO() # create a file-like object
wbk = xlwt.Workbook()
earnings_tab = wbk.add_sheet('EARNINGS')
wbk.save(f) # write to stdout
cStringIO
の代わりに使用することを提案する人もいるかもしれませんStringIO
がcStringIO
、最後にチェックしたときにUnicodeが正しく処理されないことに注意してください。
StringIO
Python3で。に置き換えられていることも注目に値しio
ます。
StringIOおよびcStringIOモジュールはなくなりました。代わりに、ioモジュールをインポートし、テキストとデータにそれぞれio.StringIOまたはio.BytesIOを使用します。
したがって、以下を使用します。
from io import StringIO
# instead of import StringIO
これは私がDjangoで使用しているものです:
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=file.xls'
book.save(response)
return response
class QueryToExcel(object):
def __init__(self, doc_name = 'doc_name'):
#some set up stuff
self.b_io = BytesIO()
self.workbook = pd.ExcelWriter(self.b_io, engine='xlsxwriter')
self.run() #fill in workbook with pandas dataframes
self.workbook.save()
def get_workbook(self):
return self.b_io.getvalue()
app = Flask(__name__)
app.debug = True
@app.route('/pvh/', methods = ['GET'])
def get_workbook(self):
return self.b_io.getvalue()