Próbuję tworzyć i dostarczać pliki Excela za pomocą Django. Mam plik jar, który pobiera parametry i tworzy plik excel zgodnie z parametrami i działa bez problemu. Ale kiedy próbuję pobrać wyprodukowany plik i udostępnić go użytkownikowi do pobrania, plik zostanie zepsuty. Ma rozmiar 0kb. To jest kawałek kodu, którego używam do generowania i serwowania programu Excel.Obsługa pliku Excel (xlsx) do pobrania dla użytkownika w Django (Python)
def generateExcel(request,id):
if os.path.exists('./%s_Report.xlsx' % id):
excel = open("%s_Report.xlsx" % id, "r")
output = StringIO.StringIO(excel.read())
out_content = output.getvalue()
output.close()
response = HttpResponse(out_content,content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename=%s_Report.xlsx' % id
return response
else:
args = ['ServerExcel.jar', id]
result = jarWrapper(*args) # this creates the excel file with no problem
if result:
excel = open("%s_Report.xlsx" % id, "r")
output = StringIO.StringIO(excel.read())
out_content = output.getvalue()
output.close()
response = HttpResponse(out_content,content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename=%s_Report.xlsx' % id
return response
else:
return HttpResponse(json.dumps({"no":"excel","no one": "cries"}))
Szukałem możliwych rozwiązań i starałem się również używać Owijarki plików, ale wynik nie został zmieniony. Zakładam, że mam problem z odczytaniem pliku xlsx do obiektu StringIO. Ale nie mam pojęcia, jak to naprawić:
dzięki za odpowiedź. Problem polegał na tym, że nie czytałem pliku w trybie binarnym, ale zaktualizowałem też swój kod, wykorzystując Twoją opinię. Mam nadzieję, że wygląda lepiej :) http://pastebin.com/ydzR2uuP – Srht
SO nie jest miejscem do przeglądu kodu (możesz chcieć sprawdzić codereview.stackexchange.com), ale oto odpowiedź http://pastebin.com/ e4zRAW5U –