jexcel_将excel数据导入到页面+导入到数据(SQL)

发布时间 2023-12-07 16:07:50作者: AutomationAnywhere

1. jexcel_数据表_excel导入到页面.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jexcel_数据表_excel导入到页面.aspx.cs" Inherits="jexcel_数据表_excel导入到页面" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>excel导入到页面</title>

    <!-- jquery -->
    <script src="Scripts/jquery/jquery-3.1.1.min.js"></script>

    <%--Jexcel包--%>
    <link rel="stylesheet" href="Scripts/jexcel/jexcel.css" />
    <link rel="stylesheet" href="Scripts/jexcel/jsuites.css" />
    <script src="Scripts/jexcel/jexcel.js"></script>
    <script src="Scripts/jexcel/jsuites.js"></script>

    <%--excel导入--%>
    <script src="Scripts/bootstrap/xlsx.core.min.js"></script>

    <%--excel导入按钮(将其他控件合并)--%>
    <style>
        .lqwvje-btn {
            display: inline-block;
            height: 38px;
            width: 78px;
            line-height: 38px;
            padding: 0 4px;
            background-color: #009688;
            color: #fff;
            white-space: nowrap;
            text-align: center;
            font-size: 14px;
            border: none;
            border-radius: 2px;
            cursor: pointer;
        }
    </style>

</head>

<body>
    <form id="form1" runat="server">
        <div>
            <label id="realBtn" class="lqwvje-btn">
                <%--lqwvje-btn:独显excel导入按钮(将其他控件合并)--%>
                <input type="file" id="testFile" hidden="hidden" />
                上传文件
            </label>

            <button id="my_refresh2"  class="lqwvje-btn" onclick="location.reload()">
                <span class="glyphicon glyphicon-refresh" aria-hidden="true" ></span>刷新页面
            </button>

        </div>

        <div id="spreadsheet2"></div>

    </form>
</body>


<%--excel导入到页面--%>
<script type="text/javascript">
    //原创来自 www.luofenming.com
    //首先监听input框的变动,选中一个新的文件会触发change事件
    document.querySelector("#testFile").addEventListener("change", function () {

        //获取到选中的文件
        var file = document.querySelector("#testFile").files[0];

        //判断文件大小
        //if (file.size > 1024 * 1024) {
        //    alert('当前文件大小:' + Math.floor(file.size / 1024) + 'KB,上传文件不能大于1024KB');
        //    return false;
        //}

        //判断文件类型
        var type = file.name.split('.');
        if (type[type.length - 1] !== 'xlsx' && type[type.length - 1] !== 'xls' && type[type.length - 1] !== 'XLS' && type[type.length - 1] !== 'XLSX') {
            alert('只能选择excel文件导入');
            return false;
        }

        //新建一个对象_读取文件
        const reader = new FileReader();

        //读取二进制字符串
        reader.readAsBinaryString(file);

        //文件读取完时触发一个方法
        reader.onload = function (e) {
            const data1 = e.target.result; //把读出来的二进制字符串赋值给data1变量
            const zzexcel = window.XLS.read(data1, { //从XLS文件中读取
                type: 'binary' //数据类型_二进制数据
            });

            //申明变量result
            const result = [];

            //从EXCEL中取值,放入变量result
            for (let i = 0; i < zzexcel.SheetNames.length; i++) {
                const newData = window.XLS.utils.sheet_to_json(zzexcel.Sheets[zzexcel.SheetNames[i]]); //xlsx.core.min.js插件 将excel数据取出
                result.push(...newData)
            }

            var data2 = JSON.stringify(result)   //用变量接收JSON数据,JSON.stringify(result)将对象变为字符串
            var excel_data = JSON.parse(data2); //JSON.parse()将字符串变为对象 。。。重要、重要
            //console.log(excel_data);           //F12的控制台中_确认

            jspreadsheet(document.getElementById('spreadsheet2'), {
                //往jexcel中装入数据
                data: excel_data,
            });

            ////逐条提取数据
            for (var i = 0; i < result.length; i++) {
                //console.log(JSON.stringify(result[i]));   //EXCEL中每一行数据 F12的控制台中_确认
                var strJsonData = JSON.stringify(result[i]);
                //alert(strJsonData);      //弹窗_确认

                //}  


                //将excel_data传给后台,写入数据库 
                $.ajax({
                    url: "/jexcel_数据表_excel导入到页面.ashx",
                    datatype: "json",
                    data: { "RequestType": "inserted_excel_data", "excel_data": strJsonData },
                    success: function (data) {
                        //alert("excel导入成功")
                    }
                });

            }

            //刷新表格  ????没成功???
            document.getElementById('spreadsheet2').jexcel.refresh();
        }
    });

</script>

<script type="text/javascript">

    var mySpreadsheet = jspreadsheet(document.getElementById('spreadsheet2'), {

        url: '/jexcel_数据表_excel导入到页面.ashx',  // 获取数据  
        search: true,          // 搜索 搜索自定义的新事件 onsearchstart、onserchrow  *      
        async: true,
        allowExport: true,     // 是否允许导出 
        colWidths: [50, 160, 100, 100, 120, 80, 100, 100, 100, 100, 100, 100, 100, 70, 70, 80, 100], //列宽        
        tableOverflow: true,   // 是否允许表溢出溢出的时候右边有那个滚动条
        tableWidth: "1420px",  // 表宽度
        tableHeight: "430px",  // 表高度
        pagination: 15,        // 每页显示数据 *
        paginationOptions: [10, 15, 20, 50], //用户自主选择每页需展示的数据条数 *
        tabs: true,            //标签
        toolbar: true,         //工具栏 需加载<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" /> 目前使用不可
        //toolbar: '#toolbar', //工具栏
        editable: true,        // 启用行内编辑        
        striped: true,          //表格斑马纹  
        sortable: true,         //排序
        sortname: "ID",         //设置默认的排序列
        sortOrder: "asc",       //排序方式 asc升序 desc降序


        //列属性 OK
        columns: [
        { field: 'ID', title: 'DBID', sortable: true, align: 'center', },
        { field: 'STARTE_DATE', title: 'STARTE_DATE', sortable: true, align: 'center', },
        { field: 'USE_NAME', title: 'USE_NAME', sortable: true, align: 'center', },
        { field: 'MACHINE_NAME', title: 'MACHINE_NAME', sortable: true, align: 'center', },
        { field: 'MATNR', title: 'MATNR', sortable: true, align: 'center', },
        { field: 'SBOX_QTY', title: 'SBOX_QTY', sortable: true, align: 'center', },
        { field: 'BOX_QTY', title: 'BOX_QTY', sortable: true, align: 'center', },
        { field: 'PO_QTY', title: 'PO_QTY', sortable: true, align: 'center', },
        { field: 'PO_CODE', title: 'PO_CODE', sortable: true, align: 'center', },
        { field: 'TOTAL_QTY', title: 'TOTAL_QTY', sortable: true, align: 'center', },
        { field: 'SURPLUS_QTY', title: 'SURPLUS_QTY', sortable: true, align: 'center', },
        { field: 'ST_TIME', title: 'ST_TIME', sortable: true, align: 'center', },
        { field: 'END_ST', title: 'END_ST', sortable: true, align: 'center', },
        { field: 'Remark', title: 'Remark', sortable: true, align: 'center', },

        ],


    });

</script>

</html>

2. jexcel_数据表_excel导入到页面.ashx (后端逻辑)

<%@ WebHandler Language="C#" Class="jexcel_数据表_excel导入到页面" %>

using System;
using System.Web;
using System.Data;
using System.IO;
using System.Data.SqlClient; //数据库
using Newtonsoft.Json;      //操作json库
using System.Text;

public class jexcel_数据表_excel导入到页面 : IHttpHandler
{
    CommonClass class1 = new CommonClass();

    //创建一个简单的Person类
    public class Person
    {
        public string No;
        public int ID;
        public string STARTE_DATE;
        public string USE_NAME;
        public string MACHINE_NAME;
        public string MATNR;
        public string SBOX_QTY;
        public string BOX_QTY;
        public string PO_QTY;
        public string PO_CODE;
        public string TOTAL_QTY;
        public string SURPLUS_QTY;
        public string ST_TIME;
        public string END_ST;
        public string Remark;

    }

    string excel_data;

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write(mysourcestring()); //显示数据表

        //前端获取excel表数据_写入数据库   
        if (context.Request["RequestType"] == "inserted_excel_data")
        {
            //接受页面传来的值
            string excel_data = context.Request["excel_data"].ToString();

            //字符处理,去掉斜杠“/” 
            StringBuilder s0 = new StringBuilder(excel_data);    //去掉JSON格式内的反斜杠
            var json = JsonConvert.DeserializeObject<Person>(s0.ToString());  //反序列
            //System.Diagnostics.Debug.WriteLine("s0 : " + s0); //确认 (调试-窗口-输出)

            string s2 = "select count(ID) from Exp_PILEUP WHERE ID=" + json.ID ;  //统计数据条数
            string ss = class1.ExecScalar(class1.GetConnection2(), s2);
            System.Diagnostics.Debug.WriteLine("s2 : " + s2); //确认 (调试-窗口-输出)

            //操作数据库
            SqlConnection conn = new SqlConnection("server=150.17.232.180;database=SSC;uid=sscosd;pwd=BtQasYxonQuZqukIYkGM");
            conn.Open();
            SqlCommand cmd1 = new SqlCommand(s2, conn); //用来执行查询语句           
            cmd1.ExecuteNonQuery();    //执行SQL语句,返回受影响的行数            
            cmd1.Dispose();            //释放资源
            conn.Close();

            //如果ID存在,那么ss大于1,更新数据;如果ID不存在,那么ss=0,插入新数据
            if (ss == "0")
            {
                //string s1 = "insert into Exp_PILEUP (USE_NAME) values ('" + json.USE_NAME + "')";
                string s1 = "insert into Exp_PILEUP (STARTE_DATE,USE_NAME,MACHINE_NAME,MATNR,SBOX_QTY,BOX_QTY,PO_QTY,PO_CODE,TOTAL_QTY,SURPLUS_QTY,ST_TIME,END_ST,Remark) values ('"
                    //+ json.ID + "','"
                    + json.STARTE_DATE + "','"
                    + json.USE_NAME + "','"
                    + json.MACHINE_NAME + "','"
                    + json.MATNR + "','"
                    + json.SBOX_QTY + "','"
                    + json.BOX_QTY + "','"
                    + json.PO_QTY + "','"
                    + json.PO_CODE + "','"
                    + json.TOTAL_QTY + "','"
                    + json.SURPLUS_QTY + "','"
                    + json.ST_TIME + "','"
                    + json.END_ST + "','"
                    + json.Remark + "')";

                //往数据库写入
                //SqlConnection conn = new SqlConnection("server=150.17.232.180;database=SSC;uid=sscosd;pwd=BtQasYxonQuZqukIYkGM");
                conn.Open();
                SqlCommand cmd2 = new SqlCommand(s1, conn); //用来执行查询语句           
                cmd2.ExecuteNonQuery();    //执行SQL语句,返回受影响的行数            
                cmd2.Dispose();            //释放资源
                conn.Close();
            }
            else
            {
                 string s3 ="update Exp_PILEUP set " + 
                        "STARTE_DATE ='" + json.STARTE_DATE + "',"+
                        "USE_NAME ='" + json.USE_NAME + "',"+
                        "MACHINE_NAME ='" + json.MACHINE_NAME + "',"+
                        "MATNR ='" + json.MATNR + "',"+ 
                        "SBOX_QTY ='" + json.SBOX_QTY + "',"+
                        "BOX_QTY ='" + json.BOX_QTY + "',"+ 
                        "PO_QTY ='" + json.PO_QTY + "',"+ 
                        "PO_CODE ='" + json.PO_CODE + "',"+ 
                        "TOTAL_QTY ='" + json.TOTAL_QTY + "',"+ 
                        "SURPLUS_QTY ='" + json.SURPLUS_QTY + "',"+ 
                        "ST_TIME ='" + json.ST_TIME + "',"+ 
                        "END_ST ='" + json.END_ST + "',"+
                        "Remark ='" + json.Remark + "'"+
                        " where id=" + json.ID;
                 //System.Diagnostics.Debug.WriteLine("ss>0 数据更新 " ); //确认 (调试-窗口-输出)
                 //往数据库写入
                //SqlConnection conn = new SqlConnection("server=150.17.232.180;database=SSC;uid=sscosd;pwd=BtQasYxonQuZqukIYkGM");
                conn.Open();
                SqlCommand cmd3 = new SqlCommand(s3, conn); //用来执行查询语句           
                cmd3.ExecuteNonQuery();    //执行SQL语句,返回受影响的行数            
                cmd3.Dispose();            //释放资源
                conn.Close();
            };
           
        };

    }


    //打开网页显示数据表
    private string mysourcestring()
    {
        //返回的样式例  [{"id":5989,"type":"ZVDH","Shipto":"S716000456","Soldto":"S7160"},{"id":6003,"type":"ZPPH","Shipto":"S2000050","Soldto":"S2000"}]        
        string s0 = "select * from Exp_PILEUP ORDER BY ID";
        SqlConnection conn = new SqlConnection("server=150.17.232.180;database=SSC;uid=sscosd;pwd=BtQasYxonQuZqukIYkGM");
        conn.Open();
        SqlCommand cmd = new SqlCommand(s0, conn); //用来执行查询语句
        SqlDataAdapter sda = new SqlDataAdapter(); //数据库适配器,用来充当数据库与数据集之间的桥梁
        sda.SelectCommand = cmd;                   //选择命令向数据库发送(发送查询语句)
        DataSet ds = new DataSet();                //创建一个数据集对象,相当于小型数据库,它当中存放若干个数据块
        sda.Fill(ds, "cs");                        //Fill: 填充  把数据填充小型数据库的“CS”表中。
        System.Data.DataTable table1 = ds.Tables[0];

        string jsonstr = JsonConvert.SerializeObject(table1);  //datatable格式转换Json格式 前提要导入 using Newtonsoft.Json
        conn.Close();
        return jsonstr;
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}