實際上並不需要將數據保存在磁盤上的任何位置; openpyxl有辦法做到這一點,雖然它沒有很好的記錄。很久以前,我使用xlwt創建了something like this,但我最近也使用openpyxl在Falcon框架中構建了類似的東西。
把他們倆撮合在一起,你的代碼將沿着線的東西:
from django.http import HttpResponse
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
workbook = Workbook()
worksheet = workbook.active
# ... worksheet.append(...) all of your data ...
response = HttpResponse(content=save_virtual_workbook(workbook), mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename=myexport.xlsx'
return response
如果生成的文件較大,我會建議考慮使用StreamingHttpResponse,但我相信,這將至少讓你去。
這只是一個基於合併的兩個項目的工作,我可以說是一個非常好的片段,所以它可能不完全正確。它應該是非常接近,但。在獵鷹的輸出看起來像:
response.content_type = 'application/octet-stream;'
response.set_header('Content-Disposition', 'attachment; filename=myexport.xlsx')
response.body = save_virtual_workbook(workbook)
UPDATE: 這是現在更容易,因爲我做了我的老django-excel-response
庫的一個完全重寫,使用openpyxl!現在可以在這裏找到:https://github.com/tarkatronic/django-excel-response
您可以使用pip install django-excel-response
進行安裝,並將其作爲Django的HttpResponse
的替代品使用!包含最少的文檔,歡迎提供改進/建議。 :)