zoukankan      html  css  js  c++  java
  • NPOI导出Excle

    前端:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <meta charset="utf-8" />
        <link href="easyui/themes/default/easyui.css" rel="stylesheet" />
        <link href="easyui/themes/icon.css" rel="stylesheet" />
        <script src="easyui/js/jquery.min.js"></script>
        <script src="easyui/js/jquery.easyui.min.js"></script>
        <script src="easyui/js/easyui-lang-zh_CN.js"></script>
        <script type="text/javascript">
            var datagrid = {
                init: function () {
                    $('#userGrid').datagrid({
                        toolbar: '',
                        title: "用户信息",
                        iconCls: 'icon icon-list',
                        nowrap: false, //折行
                        rownumbers: true, //行号
                        striped: true, //隔行变色
                        remoteSort: false,//定义从服务器对数据进行排序
                        idField: 'Id', //主键
                        //singleSelect: true, //单选
                        columns: [[
                            { field: 'ck', checkbox: true },
                            { title: 'Id', field: 'Id',  130 },
                            { title: 'Name', field: 'Name',  80 },
                            { title: 'Sex', field: 'Sex',  100 },
                            {
                                title: 'Email', field: 'Email',  100, formatter: function (value) {
                                    return "<a href='www.baidu.com'>"+value+"</a>";
                                }
                            },
                            { title: 'Remark', field: 'Remark',  100 }
                        ]],
                        onLoadSuccess: function () {
                        },
                        pagination: true,
                        pageNumber: 1,
                        pageSize: 2,
                        pageList: [2, 3, 10, 50]
                    });
                },
                databind: function () {
                    $('#userGrid').datagrid({ url: "Handler/UserInfoHandler.ashx?Action=getList" });
                }
            }
    
            $(document).ready(function () {
                datagrid.init();
                datagrid.databind();
                $("#Report1").click(ExportResumeList1)
                $("#Report2").click(ExportResumeList2)
                $("#Report3").click(ExportResumeList3)
            })
            function ExportResumeList1() {
                $.ajax({
                    url: "Handler/ReportHelperHandler.ashx?action=export1",
                    type: "get",
                    cache: false,
                    success: function (data) {
                        alert(data);
                        window.location.href = "Handler/ReportHelperHandler.ashx?action=ResponseFile&filePath=" + escape(data);
                    },
                    error: function (e) {
                        alert(e);
                    }
                });
            }
            //导出文件
            function ExportResumeList2() {
                $("#Export").attr("action", "Handler/ReportHelperHandler.ashx?action=export2");
                $("#Export").submit();
            }
            function ExportResumeList3() {
                $("#Export").attr("action", "Handler/ReportHelperHandler.ashx?action=export3");
                $("#Export").submit();
            }
        </script>
    </head>
    <body>
        <button id="Report1">Excle导出1</button>
        <button id="Report2">Excle导出2</button>
        <button id="Report3">Excle导出3</button>
        <table id="userGrid" style="400px; height:200px;"></table>
        <form style="display: none;  0px; height: 0px;" id="Export" method="post" action=""></form>
    </body>
    </html>
    

      后端:

    using Common;
    using DBUtility;
    using Model;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Text;
    using System.Web;
    
    namespace ReportTool
    {
        /// <summary>
        /// ReportHelperHandler 的摘要说明
        /// </summary>
        public class ReportHelperHandler : IHttpHandler
        {
    
            public DataProvider dataprovider = new DataProvider();
            public ReportHelperHandler()
            {
                dataprovider.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
            }
    
            public void ProcessRequest(HttpContext context)
            {
                try
                {
                    context.Response.ContentType = "text/plain";
                    string action = context.Request["Action"];
                    switch (action)
                    {
                        
                        case "export1":
                            export1(context);
                            break;
                        case "ResponseFile":
                            //ResponseFile(context.Request["filePath"]);
                            ResponseFile1(context);
                            break;
                        case "export2":
                            export2(context);
                            //responeResult(filepath,context);
                            break;
                        case "export3":
                            export3(context);
                            //responeResult(filepath,context);
                            break;
                    }
    
    
                }
                catch (Exception e)
                {
    
                    throw e;
                }
            }
            
            
            private void export1(HttpContext context)
            {
                try
                {
                    var result = configEnum.mergeRow.ToString();
                    //string BaseTemplateFolder = HttpContext.Current.Server.MapPath("~/Template");
                    string BaseTemplateFolder = AppDomain.CurrentDomain.BaseDirectory+ "Template";
                    string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
                    ExcelHelper excelHelper = new ExcelHelper(templateFile);
                    DataTable configDt = excelHelper.ExcelToDataTable(templateFile, true);
                    var list = DataTableHelper.ConvertTo<ConfigModel>(configDt);
                    DataTable dt = new DataTable();
                    string strSql = string.Empty;
                    foreach (var item in list)
                    {
                        if (item.key == "cols" && item.type == "sql")
                        {
                            strSql = item.value;
                        }
                    }
                    dt = dataprovider.FillDataTable(strSql, CommandType.Text);
                    string sDirFileName = setDataToTemplate(dt, (List<ConfigModel>)list, context);
                    System.IO.File.WriteAllText(HttpContext.Current.Server.MapPath("~/") + "log.txt", "export1"+sDirFileName);
                    //返回导出文件的路径
                    //ResponseFile(sDirFileName);
                    context.Response.Write(sDirFileName);
                }
                catch (Exception e)
                {
                    throw e;
                }
    
            }
            private void ResponseFile1(HttpContext context)
            {
                try
                {
    
                    FileStream fs = new FileStream(context.Request["filePath"], FileMode.Open);
                    byte[] bytes = new byte[(int)fs.Length];
                    fs.Read(bytes, 0, bytes.Length);
                    fs.Close();
                    context.Response.ContentType = "application/octet-stream";
                    //通知浏览器下载文件而不是打开
                    context.Response.AddHeader("Content-Disposition", "attachment;   filename=" + HttpUtility.UrlEncode(Path.GetFileName(context.Request["filePath"]), System.Text.Encoding.UTF8));
                    context.Response.BinaryWrite(bytes);
                    context.Response.Flush();
                    //context.Response.End();
                    context.ApplicationInstance.CompleteRequest();
                }
                catch (Exception e)
                {
    
                    throw e;
                }
            }
            
            private void export2(HttpContext context)
            {
                try
                {
                    var result = configEnum.mergeRow.ToString();
                    //string BaseTemplateFolder = context.Server.MapPath("~/Template");
                    string BaseTemplateFolder = AppDomain.CurrentDomain.BaseDirectory + "Template";
                    string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
                    ExcelHelper excelHelper = new ExcelHelper(templateFile);
                    DataTable configDt = excelHelper.ExcelToDataTable(templateFile, true);
                    var list = DataTableHelper.ConvertTo<ConfigModel>(configDt);
                    DataTable dt = new DataTable();
                    string strSql = string.Empty;
                    foreach (var item in list)
                    {
                        if (item.key == "cols" && item.type == "sql")
                        {
                            strSql = item.value;
                        }
                    }
                    dt = dataprovider.FillDataTable(strSql, CommandType.Text);
                    string sDirFileName = setDataToTemplate(dt, (List<ConfigModel>)list, context);
                    System.IO.File.WriteAllText(context.Server.MapPath("~/") + "log.txt", "export2"+sDirFileName);
                    //返回导出文件的路径
                    //ResponseFile(sDirFileName,context);
                    //return sDirFileName;
                    responeResult2(sDirFileName, context);
                }
                catch (Exception e)
                {
                    throw e;
                }
    
            }
            private void responeResult2(string filepath, HttpContext context)
            {
                FileStream fs1 = new FileStream(filepath, FileMode.Open);
                byte[] bytes1 = new byte[(int)fs1.Length];
                fs1.Read(bytes1, 0, bytes1.Length);
                fs1.Close();
                context.Response.ContentType = "application/octet-stream";
                //通知浏览器下载文件而不是打开
                context.Response.AddHeader("Content-Disposition", "attachment;   filename=" + HttpUtility.UrlEncode(Path.GetFileName(filepath), System.Text.Encoding.UTF8));
                context.Response.BinaryWrite(bytes1);
                context.Response.Flush();
                //context.Response.End();
                context.ApplicationInstance.CompleteRequest();
            }
    
            private void export3(HttpContext context)
            {
                try
                {
                    var result = configEnum.mergeRow.ToString();
                    string BaseTemplateFolder = context.Server.MapPath("~/Template");
                    string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
                    ExcelHelper excelHelper = new ExcelHelper(templateFile);
                    DataTable configDt = excelHelper.ExcelToDataTable(templateFile, true);
                    var list = DataTableHelper.ConvertTo<ConfigModel>(configDt);
                    DataTable dt = new DataTable();
                    string strSql = string.Empty;
                    foreach (var item in list)
                    {
                        if (item.key == "cols" && item.type == "sql")
                        {
                            strSql = item.value;
                        }
                    }
                    dt = dataprovider.FillDataTable(strSql, CommandType.Text);
                    string sDirFileName = setDataToTemplate(dt, (List<ConfigModel>)list, context);
                    System.IO.File.WriteAllText(context.Server.MapPath("~/") + "log.txt", "export13"+sDirFileName);
                    //返回导出文件的路径
                    //ResponseFile(sDirFileName,context);
                    //return sDirFileName;
                    responeResult3(sDirFileName, context);
                }
                catch (Exception e)
                {
                    throw e;
                }
    
            }
            private void responeResult3(string filepath, HttpContext context)
            {
                FileInfo file = new FileInfo(filepath);//创建一个文件对象  
                context.Response.Clear();//清除所有缓存区的内容  
                context.Response.Charset = "GB2312";//定义输出字符集  
                context.Response.ContentEncoding = Encoding.Default;//输出内容的编码为默认编码  
                context.Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name);
                //添加头信息。为“文件下载/另存为”指定默认文件名称  
                context.Response.AddHeader("Content-Length", file.Length.ToString());
                //添加头文件,指定文件的大小,让浏览器显示文件下载的速度   
                context.Response.WriteFile(file.FullName);// 把文件流发送到客户端  
                context.Response.End();
                //context.ApplicationInstance.CompleteRequest();
            }
            /// <summary>
            /// 将数据设置到模板中
            /// </summary>
            public string setDataToTemplate(DataTable dt)
            {
                string tmpFilePath = string.Empty;
                string BaseTmpFolder = AppDomain.CurrentDomain.BaseDirectory + "Export\";
                string BaseTemplateFolder = AppDomain.CurrentDomain.BaseDirectory + "Template\";
    
                foreach (string fileInfo in Directory.GetFiles(BaseTmpFolder))
                {
                    File.Delete(fileInfo);
                }
                string templateFile = BaseTemplateFolder + "端午假期网络和信息系统运行值班表(汇总).xlsx";
                string tmpFile = string.Format("{0}{1}年{2}", BaseTmpFolder, DateTime.Now.ToString("yyyy"), "端午假期网络和信息系统运行值班表(汇总).xlsx");
                File.Copy(templateFile, tmpFile);
                ExcelHelper excelHelper = new ExcelHelper(tmpFile);
                DataSet ds = new DataSet();
                ds.Tables.Add(dt);
                excelHelper.DataSetToExcel(ds, 3, 0, 0);
    
                return tmpFile;
    
            }
            public string setDataToTemplate(DataTable dt, List<ConfigModel> Listconfig, HttpContext context)
            {
                string tmpFilePath = string.Empty;
                string BaseTmpFolder = context.Server.MapPath("~/Export");
                string BaseTemplateFolder = context.Server.MapPath("~/Template");
    
                foreach (string fileInfo in Directory.GetFiles(BaseTmpFolder))
                {
                    File.Delete(fileInfo);
                }
                string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
                string tmpFile = string.Format("{0}\{1}年{2}", BaseTmpFolder, DateTime.Now.ToString("yyyy"), "端午假期网络和信息系统运行值班表(汇总).xlsx");
                File.Copy(templateFile, tmpFile);
                ExcelHelper excelHelper = new ExcelHelper(tmpFile);
                DataSet ds = new DataSet();
                ds.Tables.Add(dt);
                excelHelper.DataSetToExcel(ds, 3, 0, 0, Listconfig);
    
                return tmpFile;
    
            }
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    

      注意:

    临时文件夹读写权限设置:1.自己设置

    2.通过代码控制

    //给Excel文件添加"Everyone,Users"用户组的完全控制权限  
    FileInfo fi = new FileInfo(excelPath);  
    System.Security.AccessControl.FileSecurity fileSecurity = fi.GetAccessControl();  
    fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));  
    fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));  
    fi.SetAccessControl(fileSecurity);  
      
    //给Excel文件所在目录添加"Everyone,Users"用户组的完全控制权限  
    DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(excelPath));  
    System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl();  
    dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));  
    dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));  
    di.SetAccessControl(dirSecurity);
    

      

  • 相关阅读:
    简单算法题20200815
    求图的连通子图的个数并保存每个子图的节点python
    java遍历树,并得到每条根到叶子节点的路径
    volatile 对于n=n+1,无效
    java重载(overload)和重写(override)
    对象的上转型对象
    (阿里巴巴笔试题)直线上安装水塔,水塔到直线上其它点的距离之和最小
    选择排序、树形排序、堆排序的java代码实现
    linux里面那些奇奇怪怪但是还没有解决的问题
    Linux使用free命令buff/cache过高
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/6907284.html
Copyright © 2011-2022 走看看