Скачать Excel в браузере || Django - PullRequest
0 голосов
/ 21 февраля 2020
def excel(request):
    ans = request.POST.getlist('ans[]')
    ans_final=[]
    rows = request.POST.get('rows')
    for each_ele in ans:
        each_ele = each_ele.split('.')
        each_ele[0] = each_ele[0][:-2]
        each_ele[1] = each_ele[1][:-2]
    fin = each_ele[0]+' - '+each_ele[1]
    ans_final.append(fin)
    workbook = xlsxwriter.Workbook('/home/Desktop/status.xlsx')
    worksheet = workbook.add_worksheet('Test_Data')
    bold = workbook.add_format({'bold': True})
    for i in range(len(ans_final)):
        worksheet.write(0, i,ans_final[i],bold)

    row_index=1
    row_count = int(rows)
    while(row_count):
        col_index=0
        for each_ele in ans:
            worksheet.write(row_index, col_index, eval(each_ele))
            col_index += 1
        row_index += 1
        row_count -= 1


   workbook.close() 
   return JsonResponse({'ok':'ok'})

Как видно из приведенной выше функции в моем views.py , при нажатии кнопки ( Загрузить Excel ) в пользовательском интерфейсе запрос отправляется этой функции. и я создаю Excel и сохраняю его в папке рабочего стола на данный момент.

Как мне сделать так, чтобы Excel загружался в самом браузере в пользовательском интерфейсе для пользователя, когда " Download excel Кнопка"нажата вместо сохранения ее в указанном пути c.

Примечание : - Я использую модуль xlswriter для генерации Excel.

1 Ответ

3 голосов
/ 21 февраля 2020

Запишите вашу рабочую книгу в BytesIO, затем верните данные в ответ:

from io import BytesIO
# ...
output = BytesIO()
workbook = xlsxwriter.Workbook(output)
# ...
workbook.close()
return HttpResponse(
  output.getvalue(), 
  content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  headers={'Content-disposition': 'attachment; filename=status.xlsx'},
)
...