您好,登錄后才能下訂單哦!
小編給大家分享一下Asp.net MVC如何實現生成Excel并下載功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
由于項目上的需求,需要導出指定條件的Excel文件。經過一翻折騰終于實現了。
現在把代碼貼出來分享
(直接把我們項目里面的一部份輔助類的代碼分享一下)
我們項目使用的是Asp.Net MVC4.0模式。
每個ActionResult必然會返回一個View或Json等(View或Json中的參數都是object類型的)
所以我們需要一個公共類來統一定義操作的“成功或失敗”的狀態或返回操作的消息 ,以及有利于使用jquery $.get() 、$.post()的接收返回參數時的統一性。
以下是StatusMessageData類。(當然,如果只想要導出Excel,這個類是不需要定義的。)
/// <summary> /// 輔助傳輸StatusMessage數據 /// </summary> [Serializable] public sealed class StatusMessageData { private StatusMessageType messageType; /// <summary> /// 提示消息類別 /// </summary> public StatusMessageType MessageType { get { return messageType; } set { messageType = value; } } private string messageContent = string.Empty; /// <summary> /// 信息內容 /// </summary> public string MessageContent { get { return messageContent; } set { messageContent = value; } } private object data; /// <summary> /// 數據 /// </summary> public object Data { get { return data; } set { data = value; } } /// <summary> /// 構造器 /// </summary> /// <param name="messageType">消息類型</param> /// <param name="messageContent">消息內容</param> public StatusMessageData(StatusMessageType messageType, string messageContent, object data) { this.messageType = messageType; this.messageContent = messageContent; this.data = data; } public StatusMessageData(StatusMessageType messageType, string messageContent) { this.messageType = messageType; this.messageContent = messageContent; } public StatusMessageData() { } } /// <summary> /// 提示消息類別 /// </summary> public enum StatusMessageType { /// <summary> /// 成功 /// </summary> Success = 1, /// <summary> /// 錯誤 /// </summary> Error = -1, /// <summary> /// 提示信息 /// </summary> Hint = 0, /// <summary> /// 提醒登錄 /// </summary> Login = 5, /// <summary> /// 提示重定向 /// </summary> Redirect = 6, }
在Controller中定義ExportExcel ActionResult
[HttpPost] public ActionResult ExportExcel(SearchModel model) { StatusMessageData result = new StatusMessageData(); if (model.Data == null || model.Data.Count <= 0) { result.MessageType = StatusMessageType.Error; result.MessageContent = "沒有要下載的數據"; return Json(result); } string fileglobal = ""; //組織Excel表格 StringBuilder sb = new StringBuilder(400); sb.Append("<table cellspacing='0' rules='all' border='1'>"); sb.Append("<thead>"); sb.Append("<tr>"); sb.Append("<th>列一</th>"); sb.Append("<th>列二</th>"); sb.Append("<th>列三</th>"); sb.Append("<th>列四</th>"); sb.Append("</tr>"); sb.Append("</thead>"); sb.Append("<tbody>"); try { foreach (var item in model.Data) { sb.Append("<tr>"); sb.Append("<td>"); sb.Append(item.column1); sb.Append("</td>"); sb.Append("<td>"); sb.Append(item.column2); sb.Append("</td>"); sb.Append("<td>"); sb.Append(item.column3); sb.Append("</td>"); sb.Append("<td>"); sb.Append(item.column4); sb.Append("</td>"); sb.Append("</tr>"); } } sb.Append("</tbody>"); sb.Append("</table>"); //以UTF8格式寫入文件 byte[] contentBytes = Encoding.UTF8.GetBytes(sb.ToString()); string rootDirServerPath = "將生成的文件保存在指定的目錄名稱"; //由于我們項目上下載Excel文件基本沒有并發的情況,所以只用年月日時分秒來命名文件就可以避免生成相同文件名文件的問題。 string fileSaveName = "下載的文件名稱_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; string rootDirServerPhysicPath = Server.MapPath("~" + rootDirServerPath); if (!Directory.Exists(rootDirServerPhysicPath)) { Directory.CreateDirectory(rootDirServerPhysicPath); } string[] strFiles = Directory.GetFiles(rootDirServerPhysicPath); if (strFiles.Length > 0) { foreach (string strFile in strFiles) { System.IO.File.Delete(strFile); } } //以下是將文件保存到指定目錄 string userFailedSummaryFileSavePath = rootDirServerPhysicPath + "/" + fileSaveName; if (System.IO.File.Exists(userFailedSummaryFileSavePath)) { System.IO.File.Delete(userFailedSummaryFileSavePath); } System.IO.File.WriteAllBytes(userFailedSummaryFileSavePath, contentBytes); //拼裝好要下載文件的全路徑。 fileglobal = rootDirServerPath + "/" + fileSaveName; } catch (Exception ex) { result.MessageType = StatusMessageType.Error; result.MessageContent = ex.Message.ToString(); return Json(result); } result.MessageType = StatusMessageType.Success; result.MessageContent = "正在下載,請稍候..."; result.Data = fileglobal; return Json(result); }
完成了生成Excel的操作后,在頁面進行異步調用。
$("#export-excel").click(function (e) { e.preventDefault(); $.post("Controller/ExportExcel.aspx", $("#Form1").serialize(), function (data) { art.dialog.tips(data.MessageContent, 1.5, data.MessageType, function () { if (data.MessageType == 1) { window.open(data.Data); } else { //錯誤操作 } }); }); });
ASP.NET 是開源,跨平臺,高性能,輕量級的 Web 應用構建框架,常用于通過 HTML、CSS、JavaScript 以及服務器腳本來構建網頁和網站。
以上是“Asp.net MVC如何實現生成Excel并下載功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。