前端: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);