Asp.net MVC實現(xiàn)生成Excel并下載功能
本文實例為大家分享了Asp.net MVC實現(xiàn)生成Excel并下載的具體代碼,供大家參考,具體內(nèi)容如下
由于項目上的需求,需要導出指定條件的Excel文件。經(jīng)過一翻折騰終于實現(xiàn)了。
現(xiàn)在把代碼貼出來分享
(直接把我們項目里面的一部份輔助類的代碼分享一下)
我們項目使用的是Asp.Net MVC4.0模式。
每個ActionResult必然會返回一個View或Json等(View或Json中的參數(shù)都是object類型的)
所以我們需要一個公共類來統(tǒng)一定義操作的“成功或失敗”的狀態(tài)或返回操作的消息 ,以及有利于使用jquery $.get() 、$.post()的接收返回參數(shù)時的統(tǒng)一性。
以下是StatusMessageData類。(當然,如果只想要導出Excel,這個類是不需要定義的。)
/// <summary>
/// 輔助傳輸StatusMessage數(shù)據(jù)
/// </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>
/// 信息內(nèi)容
/// </summary>
public string MessageContent
{
get { return messageContent; }
set { messageContent = value; }
}
private object data;
/// <summary>
/// 數(shù)據(jù)
/// </summary>
public object Data
{
get { return data; }
set { data = value; }
}
/// <summary>
/// 構(gòu)造器
/// </summary>
/// <param name="messageType">消息類型</param>
/// <param name="messageContent">消息內(nèi)容</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 = "沒有要下載的數(shù)據(jù)";
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文件基本沒有并發(fā)的情況,所以只用年月日時分秒來命名文件就可以避免生成相同文件名文件的問題。
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的操作后,在頁面進行異步調(diào)用。
$("#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 {
//錯誤操作
}
});
});
});
以上就是我們項目中關(guān)于Excel生成到下載的全部操作。
考慮的情況比較少,寫的比較簡單。
如果大家有什么好的想法,可以留言,我肯定會學習并實踐好再拿出來分享。
非常感謝。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- asp.net 利用NPOI導出Excel通用類的方法
- ASP.NET實現(xiàn)上傳Excel功能
- ASP.NET保存PDF、Word和Excel文件到數(shù)據(jù)庫
- ASP.NET Core 導入導出Excel xlsx 文件實例
- ASP.NET MVC使用EPPlus,導出數(shù)據(jù)到Excel中
- asp.net DataTable導出Excel自定義列名的方法
- Asp.net實現(xiàn)直接在瀏覽器預(yù)覽Word、Excel、PDF、Txt文件(附源碼)
- asp.net實現(xiàn)導出DataTable數(shù)據(jù)到Word或者Excel的方法
- ASP.Net動態(tài)讀取Excel文件最簡方法
相關(guān)文章
.net?core?中?WebApiClientCore的使用示例代碼
這篇文章主要介紹了.net?core?中?WebApiClientCore的使用示例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
ASP.NET如何定時調(diào)用WebService服務(wù)
在ASP.NET程序中,可以通過Time組件實現(xiàn)定時器功能,但是它與數(shù)據(jù)庫中的任務(wù)計劃不一樣,它必須基于程序正在運行中才可生效,而數(shù)據(jù)庫任務(wù)計劃是不需要基于ASP.NET程序運行而執(zhí)行任務(wù)。2015-10-10
ASP.NET中Application和Cache的區(qū)別分析
在asp.net中儲存數(shù)據(jù)的方式有很多,包括application,session,cache, cookie, viewstate。其中application和cache的應(yīng)用范圍,使用方式都比較相似,這里主要對比一下這兩種方式。2010-03-03
ASP.NET讓FileUpload控件支持瀏覽自動上傳功能的解決方法
這篇文章主要介紹了ASP.NET讓FileUpload控件支持瀏覽自動上傳功能的解決方法,很實用的技巧,需要的朋友可以參考下2014-07-07
使CheckBoxList的Attributes屬性生效(修改微軟的一個bug)
使CheckBoxList的Attributes屬性生效(修改微軟的一個bug)...2007-08-08
asp.net 繼承自Page實現(xiàn)統(tǒng)一頁面驗證與錯誤處理
一直以來,我都在思考以前一個項目中,后臺文件中很多的.aspx文件上的權(quán)限判斷問題,傻乎乎的我基本上每個文件當時都給加了一句2009-04-04

