15

私は次の方法でスプレッドシートを作成することに慣れています。

    wbk = xlwt.Workbook()
    earnings_tab = wbk.add_sheet('EARNINGS')
    wbk.save(filepath)

ファイルをファイルパスに保存せず、代わりにファイルをダウンロードするユーザーにその場で書き込む方法はありますか?または、それをtmpファイルとして保存してから、ユーザーに提供する必要がありますか?

4

3 に答える 3

17

次の方法のドキュメント.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の代わりに使用することを提案する人もいるかもしれませんStringIOcStringIO、最後にチェックしたときにUnicodeが正しく処理されないことに注意してください。

重要な更新

StringIOPython3で。に置き換えられていることも注目に値しioます。

StringIOおよびcStringIOモジュールはなくなりました。代わりに、ioモジュールをインポートし、テキストとデータにそれぞれio.StringIOまたはio.BytesIOを使用します。

ソース

したがって、以下を使用します。

from io import StringIO
# instead of import StringIO
于 2013-03-26T23:13:17.413 に答える
15

これは私がDjangoで使用しているものです:

response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=file.xls'
book.save(response)
return response
于 2015-06-15T12:59:27.983 に答える
0
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()
于 2016-03-28T18:42:13.823 に答える