chengzhuo

经过两天的摸索,始终没有找到合适方法,解决上传的问题,最后在大佬的指导下完成(非常感谢)

首先下载官方扩展插件,在layui-excel/layui_exts/里面的excel.js和excel.min.js两个文件

https://fly.layui.com/extend/excel/

其次在HTML界面引入js文件,layui_exts文件夹在webapp直接目录下

<script type="text/javascript">
    layui.config({
        base: \'/layui_exts/\'
    }).extend({
        excel: \'excel\'
    });
</script>

按钮代码

 <button class="layui-btn layui-btn-sm" style="background-color: #10A9FF;" id="importExcel">
            <i class="layui-icon"></i>上传文件
 </button>

然后进行上传操作

<script>
    layui.use([\'table\',\'jquery\',\'layer\',\'upload\',\'excel\'],function () {
        var table = layui.table
            , $ = layui.jquery
            , layer = layui.layer
            , upload = layui.upload
            , excel = layui.excel
        ;

        //upload上传实例
        var uploadInst = upload.render({
            elem: \'#importExcel\' //绑定元素
            , url: \'/upload/\' //上传接口(PS:这里不用传递整个 excel)
            , auto: false //选择文件后不自动上传
            , accept: \'file\'
            , choose: function (obj) {// 选择文件回调
                //console.debug(obj)
                var files = obj.pushFile()
                var fileArr = Object.values(files)// 注意这里的数据需要是数组,所以需要转换一下
                //console.debug(fileArr)
                // 用完就清理掉,避免多次选中相同文件时出现问题
                for (var index in files) {
                    if (files.hasOwnProperty(index)) {
                        delete files[index]
                    }
                }
                uploadExcel(fileArr) // 如果只需要最新选择的文件,可以这样写: uploadExcel([files.pop()])
            }
        })
        /**
         * 上传excel的处理函数,传入文件对象数组
         * @param  {[type]} files [description]
         * @return {[type]}       [description]
         */
        function uploadExcel(files) {
            try {
                excel.importExcel(files, {
                    // 读取数据的同时梳理数据
                    fields: {
                    \'vmNo\': \'A\'
                    ,\'vmAL\': \'B\'
                    ,\'vmName\': \'C\'
                    ,\'vmExp\': \'D\'
                    ,\'vmStartDate\': \'E\'
                    ,\'vmEndDate\': \'F\'
                    ,\'vmNum\': \'G\'
                    ,\'vmPer\': \'H\'
                    }
                }, function (data) {
                    // console.debug(data);
                    $.each(data, function (index, obj) {
                        // console.debug(obj)
                        // console.debug(obj.Sheet1)
                        $.each(obj.Sheet1, function (index, object){
                            console.log(object);
                            var vmNo=object.vmNo;
                            var vmAL=object.vmAL;
                            var vmName=object.vmName;
                            var vmExp=object.vmExp;
                            var vmStartDate=object.vmStartDate;
                            var vmEndDate=object.vmEndDate;
                            var vmNum=object.vmNum;
                            var vmPer=object.vmPer;
                            console.log(object.vmEndDate);

                            if(vmNo=="编号"){

                            }else {
                                $.ajax({
                                    // async: false,
                                    url: \'addVM\',//产品型号下拉框
                                    type: \'post\',
                                    // dataType: "json",
                                    // contentType: "application/json",
                                    data: {
                                        vmNo: vmNo,
                                        vmAL: vmAL,
                                        vmName: vmName,
                                        vmExp: vmExp,
                                        vmStartDate: vmStartDate,
                                        vmEndDate: vmEndDate,
                                        vmNum: vmNum,
                                        vmPer: vmPer
                                    },
                                    success: function (data) {
                                        layer.msg(\'上传成功\');
                                        table.reload(\'test\',{
                                            url:"findAllVM"
                                        })
                                    },
                                    error: function (msg) {
                                        layer.msg(\'请联系管理员!!!\');
                                    }
                                });
                            }
                        })
                    });

                    // 如果不需要展示直接上传,可以再次 $.ajax() 将JSON数据通过 JSON.stringify() 处理后传递到后端即可
                    /*layer.open({
                        title: \'文件转换结果\'
                        , area: [\'800px\', \'400px\']
                        , offset: [\'100px\', \'100px\']
                        , tipsMore: true
                        , content: laytpl($(\'#LAY-excel-export-ans\').html()).render({data: data, files: files})
                        , success: function () {
                            // element.render(\'tab\')
                            code({})
                        }
                    })*/
                })
            } catch (e) {
                layer.alert(e.message)
            }
        }
    });
</script>

如果需要先对数据进行检验,可以把弹出层的代码解开并加上相关的代码,如下

<script type="text/html" id="LAY-excel-export-ans">
    {{# layui.each(d.data, function(file_index, item){ }}
    <blockquote class="layui-elem-quote">{{d.files[file_index].name}}</blockquote>
    <div class="layui-tab">
        <ul class="layui-tab-title">
            {{# layui.each(item, function(sheet_name, content) { }}
            <li>{{sheet_name}}</li>
            {{# }); }}
        </ul>
        <div class="layui-tab-content">
            {{# layui.each(item, function(sheet_name, content) { }}
            <div class="layui-tab-item">
                <table class="layui-table">
                    {{# layui.each(content, function(row_index, value) { }}
                    {{# var col_index = 0 }}
                    <tr>
                        {{# layui.each(value, function(col_key, val) { }}
                        <td id="table-export-{{file_index}}-{{sheet_name}}-{{row_index}}-{{col_index++}}">{{val}}</td>
                        {{# });}}
                    </tr>
                    {{# });}}
                </table>
                <pre class="layui-code">{{JSON.stringify(content, null, 2)}}</pre>
            </div>
            {{# }); }}
        </div>
    </div>
    {{# }) }}
</script>

 

 

分类:

技术点:

相关文章: