Я использую инструмент pandas для создания загружаемого файла excel. Excel получит его из таблицы SQL, которая, в свою очередь, будет заполнена в зависимости от значений, введенных пользователем. Я добавил одну кнопку загрузки в моя веб-страница для загрузки Excel.Django: python pandas generate blank excel
При нажатии кнопки загрузки создается пустой файл excel с именем листа и именем файла как Отчет о непротиворечивости. Может кто-нибудь указать, что я делаю неправильно здесь.
Заранее спасибо
views.py
def export_excel(request):
response = HttpResponse(content_type="application/vnd.ms-excel")
response['Content-Disposition'] = 'attachment; filename=Consistency Report.xls'
fname = 'Consistency Report.xls'
cnxn = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=******;DATABASE=testing;UID=***;PWD=******')
cursor = cnxn.cursor()
cursor.execute("select * from dhm_consis_report_tbl")
columns = [column[0] for column in cursor.description]
data=cursor.fetchall()
cursor.commit()
print(columns)
for i in range(0,len(data)):
data[i]=tuple(data[i])
df = ps.DataFrame(data=data,columns=columns)
writer = ps.ExcelWriter('Consistency Report.xls',engine='xlwt')
df.to_excel(writer,sheet_name='Report')
writer.save()
return response
Итак, я отредактировал мой views.py и я в состоянии генерировать и скачать Excel файл, но проблема в том, что теперь файл загрузки в двух местах; один в моей папке проекта и один в моей папке загрузки. Также файл в папке загрузки пуст, а тот, что находится в моей папке проекта, содержит данные. Может кто-нибудь объяснить, почему это происходит?
Модифицированный views.py
def export_excel(request):
response = HttpResponse(content_type="application/vnd.ms-excel;charset=utf-8")
response['Content-Disposition'] = 'attachment; filename=Consistency Report.xls'
df = ps.DataFrame.from_records(DHM_Consis_Report.objects.values('conquery_source','conquery_name','conquery_count','conquery_desc','criticality','sp_status','con_rundate','instance_id'))
print(df)
writer = ps.ExcelWriter('Consistency Report.xls',encoding='utf-8')
df.to_excel(writer,sheet_name='Report')
writer.save()
return response
В основном вам нужно отправить сгенерированный файл «непротиворечивость Report.xls», вы можете сделать это, прочитав его в тело ответа сервлета или с использованием другой альтернативы, как SendFile или файловый обмен. – Rolando
@Rho Можете ли вы объяснить, как это сделать. Django noob, поэтому любая помощь высоко ценится. – Prav001
Я думаю, что одним быстрым и грязным способом может быть: 'response.content = open (« Consistency Report.xls »)' непосредственно перед 'return response'. Но это предполагает, что ваш файл достаточно мал, чтобы вписаться в память. – Rolando