NPOI導出Excle

前端:javascript

<!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', width: 130 },
                        { title: 'Name', field: 'Name', width: 80 },
                        { title: 'Sex', field: 'Sex', width: 100 },
                        {
                            title: 'Email', field: 'Email', width: 100, formatter: function (value) {
                                return "<a href='www.baidu.com'>"+value+"</a>";
                            }
                        },
                        { title: 'Remark', field: 'Remark', width: 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="width:400px; height:200px;"></table>
    <form style="display: none; width: 0px; height: 0px;" id="Export" method="post" action=""></form>
</body>
</html>

  後端:css

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;
            }
        }
    }
}

  注意:html

臨時文件夾讀寫權限設置:1.本身設置前端

2.經過代碼控制java

//給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);
相關文章
相關標籤/搜索