Asp.Net MVC+Layui 导出Execl

 

.net 导出Execl 方法:

        #region 导出Execl  根据table内容全部到导出
        public static void ExcelImport(DataTable dt, string ExportFileName)
        {
            StringWriter sw = GetStringWriter(dt);
            //当前编码
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            //把输出的文件名进行编码
            string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);
            //文件名
            string str = "attachment;filename=" + fileName + ".xls";
            //把文件头输出,此文件头激活文件下载框
            HttpContext.Current.Response.AppendHeader("Content-Disposition", str);//http报头文件
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            //this.Page.EnableViewState = false;
            HttpContext.Current.Response.Write(sw);
            HttpContext.Current.Response.End();
        }
        public static StringWriter GetStringWriter(DataTable dt)
        {
            StringWriter sw = new StringWriter();
            //    sw.Write(dc.ColumnName + "\t");
            //读列值
            //重新的一行
           // sw.Write(sw.NewLine);

            //读列名
            foreach (DataColumn dc in dt.Columns)
                sw.Write(dc.ColumnName + "\t");
                
            //读列值
            //重新的一行
            sw.Write(sw.NewLine);
            if (dt != null)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        sw.Write(dr[i].ToString() + "\t");
                    }
                    sw.Write(sw.NewLine);
                }
            }
            sw.Close();

            return sw;
        }

        #endregion

调用方式:只要调用此方法浏览器就直接下载文件

 CommMethod.ExcelImport(dataTable, "文件名称"+DateTime.Now.ToString("yyyyMMddHHmm"));

 

 

结合layui方式下载,前端如将 按钮放在表头:先定义按钮根据table中的 toolbar: '#toolbar_datatab' 进行设置:

<script type="text/html" id="toolbar_datatab">
    <div class="layui-btn-container">

        <button class="layui-btn layui-btn-sm lay_bnt_border " id="btnImport">Execl导入</button>

    </div>
</script>

 

触发按钮方法,需要使用到Layui的upload,并且在layui.use 时需要声明这个upload

 

 

        //======================导入Execl 方法  Begion ==================================================

        upload.render({
            elem: '#btnImport',
            url: '/Ajax/AjaxIOSDataInfo.ashx?type=ExeclImportData',
            data: {
                type: "Import"
            },
            exts: 'xls',
            before: function (data) {
                loadIndex = layer.load(2);
            },
            done: function (res) {
                layer.close(loadIndex);
                if (res.code < 0) {
                    table.reload('iosdatatab');
                    return layer.alert('导入失败<br/>' + res.msg, { icon: 2 });
                }
                $("#btnSearch").click();
                table.reload('findtab');               
                layer.alert('导入成功<br/>' + res.msg,
                    {
                        icon: 1,
                        yes: function () {
                            location.reload();
                        }
                    },
                );
                return 
            },
            error: function (err) {
                debugger
                layer.alert('导入出现异常', { icon: 2 });
            }
        });



        //====================导入Execl 方法  End =====================================================

 

posted @ 2021-11-04 14:46  znyzny  阅读(145)  评论(0)    收藏  举报