zoukankan      html  css  js  c++  java
  • 大作业 选取指定列导出到excel2

    实现了选取指定列导出为excel,上次只实现了获取穿梭框右侧的数据,这次实现了将数据传到后台,导出为excel文件

    首先是将数据传到后台,我将数据拼接为字符串传到后台:

     var getData = transfer.getData('export_select_data');
                //将数据进行拼接
                var str=""
                for(i=0;i<getData.length;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文件了

  • 相关阅读:
    【HTML】使用css3和html给网站添加上春节灯笼特效
    【CSS】学习笔记2 字体设置
    【CSS】学习笔记3 段落设置
    【CSS】学习笔记1 使用CSS样式表
    正则
    图片懒加载
    uni-app-组件
    uni-app-condition(条件)启动模式
    uni-app-页面
    uni-app项目目录和开发规范
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15638240.html
Copyright © 2011-2022 走看看