2017-11-18 37 views
0

フォームからxlsxファイルをいくつか取得しようとしていますが、openpyxlを使用してロードしてデータ処理を行います。最後に、zlsに処理されたすべてのxlsxファイルをダウンロードする必要があります。ユーザー。ここ複数のopenpyxl xlsxワークブックを1つの.zipファイルにダウンロードする

は、私がこれまでに

if form.is_valid(): 

    s = StringIO.StringIO() 
    zf = zipfile.ZipFile(s, mode="w") 

    for xlsx in request.FILES.getlist('xlsxs'): 

     element_column = "G" 
     element_row = 16 

     massar_column = "C" 
     massar_row_start = 18 

     loop = column_index_from_string(element_column) 
     while (loop <= ws.max_column): 
      for i in range(massar_row_start, ws.max_row+1): 
       # ... 
       ws["%s%s" % (element_column,i)] = 0 
       # ... 

      loop+=2 
      element_column = get_column_letter(loop) 

     buf = save_virtual_workbook(wb) 
     zf.write(buf) # or zf.write(wb) 

    zf.close() 
    response = HttpResponse(s.getvalue(), content_type="application/x-zip-compressed") 
    response['Content-Disposition'] = "attachment; filename=notes.zip" 
    return response 

やったことの一例である私は、エラーにあなたが提供できるすべての助けを事前に

TypeError at My_view 
stat() argument 1 must be encoded string without null bytes, not str 

感謝を取得します。

+0

エラーを報告する際には、完全なスタックトレースを与える必要があります。実際のエラーの場所を教えてくれます。また、Pythonのバージョンとその他のライブラリ(Django?)とそこに含まれるバージョンを含める必要があります。 – spookylukey

+0

@spookylukeyエラーは、 'zf.write(buf)'行にあります。私はPython 2.7.12 – ppp0h

答えて

0

save_virtual_workbook返信a bytestream - source

この値をファイル名が必要なZipFile.writeに渡しています。

ZipFile.writestrを使用する必要があります。アーカイブ内で使用されるファイル名を指定する必要があります。私はあなたが見ているエラーメッセージをどのように受け取っているのか分かりませんが、これは私が見ることができる最初の間違いです。

+0

zf.writestr(xlsx.name、buf)でdjango 1.10を使用して問題を解決しています。ありがとう – ppp0h

関連する問題