English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Asp.net MVC zur Erstellung von Excel und Download-Funktion

In diesem Artikel teile ich die spezifische Code-Beispiel für die Generierung und das Herunterladen von Excel-Dateien mit Asp.net MVC, um Ihnen zur Referenz zu dienen. Der Inhalt ist wie folgt

Aufgrund der Anforderungen des Projekts ist es erforderlich, Excel-Dateien unter bestimmten Bedingungen zu exportieren. Nach einigen Versuchen wurde es endlich erreicht.

Hier wird der Code eingefügt und geteilt

(Hiermit teilen wir einige Codes der Hilfsklassen in unserem Projekt direkt mit)

Unser Projekt verwendet Asp.Net MVC4.0-Modus.

Jeder ActionResult gibt zwangsläufig eine View oder Json zurück (die Parameter in View oder Json sind alle vom Typ object)

Daher benötigen wir eine öffentliche Klasse, um den einheitlichen Zustand der "Erfolg oder Misserfolg" der Operationen zu definieren und die Einheitlichkeit bei der Verwendung von jquery $.get() und $.post() zu gewährleisten, wenn die Rückgabeparameter empfangen werden.

Hier ist die Klasse StatusMessageData.(Natürlich ist diese Klasse nicht erforderlich, wenn nur Excel exportiert werden soll.)

/// <summary>
 /// Hilfsübertragung von StatusMessage-Daten
 /// </summary>
 [Serializable]
 public sealed class StatusMessageData
 {
  private StatusMessageType messageType;
  /// <summary>
  /// Hinweisnachrichtkategorie
  /// </summary>
  public StatusMessageType MessageType
  {
   get { return messageType; }
   set { messageType = value; }
  };
  private string messageContent = string.Empty;
  /// <summary>
  /// Informationsinhalt
  /// </summary>
  public string MessageContent
  {
   get { return messageContent; }
   set { messageContent = value; }
  };
  private object data;
  /// <summary>
  /// Daten 
  /// </summary>
  public object Data
  {
   get { return data; }
   set { data = value; }
  };
  /// <summary>
  /// Konstruktor
  /// </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>
 /// Hinweisnachrichtkategorie
 /// </summary>
 public enum StatusMessageType
 {
  /// <summary>
  /// Erfolg
  /// </summary>
  Success = 1,
  /// <summary>
  /// Fehler
  /// </summary>
  Error = -1,
  /// <summary>
  /// Hinweisinformation
  /// </summary>
  Hint = 0,
  /// <summary>
  /// Anmeldung erinnern
  /// </summary>
  Login = 5,
  /// <summary>
  /// Hinweis zur Umleitung
  /// </summary>
  Redirect = 6,
 };

ExportExcel ActionResult im Controller definieren

[HttpPost]
  public ActionResult ExportExcel(SearchModel model)
  {
   StatusMessageData result = new StatusMessageData();
   if (model.Data == null || model.Data.Count <= 0)
   {
    result.MessageType = StatusMessageType.Error;
    result.MessageContent = "Es gibt keine Daten zum Herunterladen";
    return Json(result);
   };
   string fileglobal = "";
   //Excel-Tabelle organisieren
   StringBuilder sb = new StringBuilder(400);
   sb.Append("<table cellspacing='0' rules='all' border='1'>");
   sb.Append("<thead>");
   sb.Append("<tr>");
   sb.Append("<th>Spalte eine</th>");
   sb.Append("<th>Spalte zwei</th>");
   sb.Append("<th>Spalte drei</th>");
   sb.Append("<th>Spalte vier</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>");
    //mit UTF8Format in die Datei schreiben
    byte[] contentBytes = Encoding.UTF8.GetBytes(sb.ToString());
    string rootDirServerPath = "Dateien in das angegebene Verzeichnisname speichern";
    //Da es in unserem Projekt praktisch keine Szenarien mit parallelen Downloads von Excel-Dateien gibt, kann das Problem mit gleichem Dateinamen durch Benennung der Datei nach JJJJMMTTSS durch den Zeitstempel vermieden werden.
    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);
     };
    };
    //Die Datei wird in das angegebene Verzeichnis gespeichert.
    string userFailedSummaryFileSavePath = rootDirServerPhysicPath + "/" + fileSaveName;
    if (System.IO.File.Exists(userFailedSummaryFileSavePath))
    {
     System.IO.File.Delete(userFailedSummaryFileSavePath);
    };
    System.IO.File.WriteAllBytes(userFailedSummaryFileSavePath, contentBytes);
    //Vollständiger Pfad des zu herunterladenden Dateis wird zusammengebaut.
    fileglobal = rootDirServerPath + "/" + fileSaveName;
   };
   catch (Exception ex)
   {
    result.MessageType = StatusMessageType.Error;
    result.MessageContent = ex.Message.ToString();
    return Json(result);
   };
   result.MessageType = StatusMessageType.Success;
   result.MessageContent = "Lädt herunter, bitte warten...";
   result.Data = fileglobal;
   return Json(result);
  }; 

Nachdem die Generierung von Excel abgeschlossen wurde, wird auf der Seite asynchron aufgerufen.

$("#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 {
          //Fehlerbedingung
        };
      });
    });
  });

Dies sind alle Operationen in unserem Projekt zur Generierung und Herunterladung von Excel.

Es wurden weniger Szenarien in Betracht gezogen und es wurde einfacher beschrieben.

Wenn Sie gute Ideen haben, können Sie eine Nachricht hinterlassen. Ich werde sicherstellen, dass ich sie lerne und praktiziere, bevor ich sie teile.

Vielen Dank.

Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass er Ihnen bei Ihrem Lernen hilft und wir hoffen, dass Sie die Anstrengungen des呐喊教程 unterstützen.

Erklärung: Der Inhalt dieses Artikels stammt aus dem Internet und gehört dem Urheberrechtlichem Eigentümer. Der Inhalt wird von Internetnutzern freiwillig und selbstständig hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat die Inhalte nicht manuell bearbeitet. Sie trägt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige urheberrechtliche Inhalte finden, freuen wir uns über die E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @ beim Senden von E-Mails, um eine Meldung zu senden und relevante Beweise bereitzustellen. Sobald dies überprüft wurde, wird die Website die beanstandeten urheberrechtlichen Inhalte sofort löschen.)

Gefällt mir