大作业 选取指定列导出到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文件了