2016-08-03 13 views
2

私は時々Excelファイルに何十万行も出力するWebアプリケーションを作成しています。 openpyxlがExcelの出力準備に選ばれましたが、データベースからデータを読み込んで同時に出力できるかどうかはわかりません。それを行う方法はありますか?ここで私はCSVで何を意味するかの例です:巨大なExcelファイルをストリームして、オンザフライで作成しますか?

def csv_view(request, iterator, keys): 
    """A view that streams a large CSV file.""" 

    class Echo(object): 
     """An object that implements just the write method of the file-like 
     interface. 
     """ 
     def write(self, value): 
      """Write the value by returning it, 
       instead of storing in a buffer.""" 
      return value 

    def get_iter(): 

     writer = csv.writer(Echo()) 
     yield writer.writerow(keys) 
     for row in iterator: 
      yield writer.writerow(row) 

    response = StreamingHttpResponse(get_iter(), content_type="text/csv") 
    response['Content-Disposition'] = 'attachment; filename="output.csv"' 
    return response 
+0

データベースでは、CSVファイルを意味しますか? – jmunsch

+0

データベースとは、「任意のイテレータ」を意味します。私は基本的に、CSVではなくその場でXLSを生成するこの 'csv_view'関数に相当するものが必要です。 @jmunsch – d33tah

+0

「スプールされたファイル」をmaxelizeで作成して、Excelで処理できるものを作成し、次にチャンクされたExcelファイルをストリーミングできますか? 'write_only'モードは無制限のサイズで' NamedTemporaryFile'を使いますか?ユースケースについてはわかりません。 – jmunsch

答えて

1

openpyxlはすでにストリーミング用に設計write-onlyモードを提供します。ただし、すべてのXSLXファイルは実際にはzipファイルなので、zip形式ではストリーミングが許可されていないため、書き込まれている間にXLSXファイルをストリーミングすることはできません。

+0

ありがとう!そして定期的な.xls? – d33tah

+1

私は知らないが、私はそれを疑う。とにかく「巨大な」XLSファイルを作成することはできません.256色と65000色の奇数行に制限されています。 –

関連する問題