Django:python pandas生成空白excel

时间:2014-12-03 11:10:14

标签: django excel pandas

我正在使用pandas工具创建可下载的excel文件.Excel将从SQL表中获取数据,然后根据用户输入的值来填充。我在我的网页上附加了一个下载按钮来下载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

1 个答案:

答案 0 :(得分:0)

最后,我能够生成所需的excel.Earlier我用数据创建和编写excel但是我的HttpResponse没有获得所需的数据。我把关于生成excel的逻辑放在单独的函数和逻辑上关于下载生成的文件在单独的功能。这就是我做的。

我知道它粗糙而低效但这对我有用。如果有人有更好的方法,请分享。

<强> views.py

 @login_required
def consisreports(request):
    cust= customername
    username=None
    if request.user.is_authenticated():
        username=request.user.username
    print(username)    
    table=ConsisReport(DHM_Consis_Report.objects.all())
    RequestConfig(request,paginate={"per_page": 25}).configure(table)
    todays=date.today()
    todays=todays.strftime("%d-%m-%y")
    filename="Consistency Report %s as on %s %s.xls"%(cust,str(todays),username)
    colname=['Customer','Query ','Count','Desc','Criticality','Status','Rundate','Instance ID']
    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'))
    df=df[['conquery_source','conquery_name','conquery_count','conquery_desc','criticality','sp_status','con_rundate','instance_id']]
    print(df)
    #df.save('C:/Users/P1097/Desktop')
    writer = ps.ExcelWriter(filename)
    df.to_excel(writer,sheet_name='Report',index=False,engine='xlsxwriter',header=colname)
    writer.save()
    return render(request, 'consistency/consresult.html', {'table': table,'customername':cust})


@login_required       
def  export_excel(request):
    custname=customername
    username=None
    if request.user.is_authenticated():
        username=request.user.username
    todays=date.today()
    todays=todays.strftime("%d-%m-%y")
    filename="Consistency Report %s as on %s %s.xls"%(custname,str(todays),username)
    wrapper=open(filename,"rb")
    cont=wrapper.read()
    response = HttpResponse(cont,content_type="application/vnd.ms-excel;charset=utf-8")
    response['Content-Length']=os.path.getsize(filename)
    size=os.path.getsize(filename)
    print(size)
    wrapper.close()
    response['Content-Disposition'] = 'attachment; filename= %s'%filename
    return response