国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Asp.net MVC實現(xiàn)生成Excel并下載功能

2024-07-10 13:32:50
字體:
供稿:網(wǎng)友

本文實例為大家分享了Asp.net MVC實現(xiàn)生成Excel并下載的具體代碼,供大家參考,具體內(nèi)容如下

由于項目上的需求,需要導(dǎo)出指定條件的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類。(當(dāng)然,如果只想要導(dǎo)出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生成到下載的全部操作。

考慮的情況比較少,寫的比較簡單。

如果大家有什么好的想法,可以留言,我肯定會學(xué)習(xí)并實踐好再拿出來分享。

非常感謝。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到ASP.NET教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新宾| 凤台县| 青川县| 安吉县| 邹平县| 福州市| 大邑县| 嘉定区| 明光市| 都江堰市| 宁蒗| 饶阳县| 交城县| 宁德市| 长兴县| 翼城县| 贞丰县| 临澧县| 翁源县| 肇源县| 临江市| 博乐市| 阿鲁科尔沁旗| 南涧| 元氏县| 临潭县| 青州市| 基隆市| 长子县| 依安县| 密云县| 灯塔市| 怀来县| 敦化市| 翼城县| 施甸县| 大名县| 抚顺市| 山西省| 花莲市| 拉萨市|