大作业 选取指定列导出到excel2
实现了选取指定列导出为excel,上次只实现了获取穿梭框右侧的数据,这次实现了将数据传到后台,导出为excel文件
首先是将数据传到后台,我将数据拼接为字符串传到后台:
var getData = transfer.getData('export_select_data'); //将数据进行拼接 var str="" for(i=0;i){ str=str+getData[i].value+"," }
利用ajax传到后台:
$.ajax({ type: "GET", url: "/export_select", data:{getData_str:str,table_name:"{{table_name}}"}, dataType: "json", success: function(data){ if(data.flag==1){ window.open("http://127.0.0.1:5000/export_select_download?table_name={{ table_name }}") }else if(data.flag==0){ alert("导出失败") } } });
到了后台我们需要将要导出的列从数据库中查出来并导出为excel
在网络上找到了一个从数据库查数据导出为excel的代码:
#指定列导出为excel文件 #先从数据库读出指定列,在转换为excel文件,返回文件名,在让用户下载 def export_excel(getdata_str,table_name): # 连接数据库,查询数据 conn,cur=get_conn_mysql() #将最后的逗号去掉 getdata_str=getdata_str[0:-1] sql = 'select '+getdata_str+' from %s' % table_name cur.execute(sql) # 返回受影响的行数 fields = [field[0] for field in cur.description] # 获取所有字段名 all_data = cur.fetchall() # 所有数据 # 写入excel book = xlwt.Workbook() sheet = book.add_sheet('sheet1') for col, field in enumerate(fields): sheet.write(0, col, field) row = 1 for data in all_data: for col, field in enumerate(data): sheet.write(row, col, field) row += 1 book.save("export_excel_select/%s.xls" % table_name) print("文件已导出:"+"export_excel_select/%s.xls" % table_name) return "%s.xls" % table_name
这样后台获取前台传过来的表名与属性在调用这个方法就可以生成excel文件:
#文件自定义列导出 @app.route('/export_select') def export_select(): flag=1; #获取字符串 getdata_str = request.values.get("getData_str") #获取表名 table_name=request.values.get("table_name") #获取已经导出的excel文件名 try: file_name=connectsql.export_excel(getdata_str,table_name) except: flag=0 print("导出文件名:"+file_name) return jsonify({"flag":flag,"file_name":file_name})
这里有一个问题由于用的是ajax所以无法使用
return send_from_directory(r"export_excel_select", filename=file_name, as_attachment=True)
下载文件,我在ajax里又跳转了一个url
success: function(data){ if(data.flag==1){ window.open("http://127.0.0.1:5000/export_select_download?table_name={{ table_name }}") }else if(data.flag==0){ alert("导出失败") } }
#自定义文件导出下载: @app.route("/export_select_download") def export_select_download(): file_name = request.values.get("table_name")+".xls" return send_from_directory(r"export_excel_select", filename=file_name, as_attachment=True)
这样就可以下载刚刚生成的excel文件了