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

Implémentation de la génération et du téléchargement d'Excel avec Asp.net MVC

Dans cet article, nous partageons avec vous l'exemple de code pour générer et télécharger un fichier Excel en Asp.net MVC, à titre de référence, voici le contenu détaillé

En raison des besoins du projet, il est nécessaire d'exporter un fichier Excel sous des conditions spécifiques. Après un certain temps de détour, cela a finalement été réalisé.

Maintenant, mettons le code en ligne pour le partager

(Partageons directement une partie du code des classes d'assistance de notre projet)

Notre projet utilise Asp.Net MVC4.0 modèle.

Chaque ActionResult retournera inévitablement un View ou un Json (les paramètres de View ou de Json sont tous de type object).

Ainsi, nous avons besoin d'une classe publique pour définir de manière uniforme l'état 'réussite ou échec' des opérations ou les messages de retour, et pour favoriser l'uniformité de l'utilisation des paramètres de retour lors de l'utilisation de jquery $.get() et $.post().

Voici la classe StatusMessageData. (Bien sûr, si vous ne voulez exporter que l'Excel, cette classe n'a pas besoin d'être définie.)

/// <summary>
 /// Aide au transfert des données StatusMessage
 /// </summary>
 [Serializable]
 public sealed class StatusMessageData
 {
  private StatusMessageType messageType;
  /// <summary>
  /// catégorie de message d'avis
  /// </summary>
  public StatusMessageType MessageType
  {
   get { return messageType; }
   set { messageType = value; }
  });
  private string messageContent = string.Empty;
  /// <summary>
  /// Contenu de l'information
  /// </summary>
  public string MessageContent
  {
   get { return messageContent; }
   set { messageContent = value; }
  });
  private object data;
  /// <summary>
  /// Données 
  /// </summary>
  public object Data
  {
   get { return data; }
   set { data = value; }
  });
  /// <summary>
  /// Constructeur
  /// </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>
 /// catégorie de message d'avis
 /// </summary>
 public enum StatusMessageType
 {
  /// <summary>
  /// succès
  /// </summary>
  Success = 1,
  /// <summary>
  /// erreur
  /// </summary>
  Error = -1,
  /// <summary>
  /// message d'avis
  /// </summary>
  Hint = 0,
  /// <summary>
  /// avertissement de connexion
  /// </summary>
  Login = 5,
  /// <summary>
  /// redirection d'avis
  /// </summary>
  Redirect = 6,
 });

définition de l'ActionResult ExportExcel dans le Controller

[HttpPost]
  public ActionResult ExportExcel(SearchModel model)
  {
   StatusMessageData result = new StatusMessageData();
   if (model.Data == null || model.Data.Count <= 0)
   {
    result.MessageType = StatusMessageType.Error;
    result.MessageContent = "Il n'y a pas de données à télécharger";
    return Json(result);
   });
   string fileglobal = "";
   //organiser un tableau Excel
   StringBuilder sb = new StringBuilder(400);
   sb.Append("<table cellspacing='0' rules='all' border='1'>");
   sb.Append("<thead>");
   sb.Append("<tr>");
   sb.Append("<th>Colonne une</th>");
   sb.Append("<th>Colonne deux</th>");
   sb.Append("<th>Colonne trois</th>");
   sb.Append("<th>Colonne quatre</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>");
    //en UTF8écrire en format
    byte[] contentBytes = Encoding.UTF8.GetBytes(sb.ToString());
    string rootDirServerPath = "stocker les fichiers générés dans le nom de répertoire spécifié";
    //Since there is basically no concurrency in downloading Excel files in our project, we can avoid the problem of generating duplicate filenames by using year, month, day, hour, minute, and second to name the file.
    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);
     });
    });
    //The following is to save the file to the specified directory
    string userFailedSummaryFileSavePath = rootDirServerPhysicPath + "/" + fileSaveName;
    if (System.IO.File.Exists(userFailedSummaryFileSavePath))
    {
     System.IO.File.Delete(userFailedSummaryFileSavePath);
    });
    System.IO.File.WriteAllBytes(userFailedSummaryFileSavePath, contentBytes);
    //Assemble the full path of the file to be downloaded.
    fileglobal = rootDirServerPath + "/" + fileSaveName;
   });
   catch (Exception ex)
   {
    result.MessageType = StatusMessageType.Error;
    result.MessageContent = ex.Message.ToString();
    return Json(result);
   });
   result.MessageType = StatusMessageType.Success;
   result.MessageContent = "Téléchargement en cours, veuillez patienter...";
   result.Data = fileglobal;
   return Json(result);
  }); 

L'opération de génération d'Excel est terminée, une appel asynchrone est effectué sur la page.

$("#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 {
          //Opération d'erreur
        });
      });
    });
  });

Voici toutes les opérations de génération et de téléchargement d'Excel dans notre projet.

Le nombre de situations envisagées est relativement faible, et l'écriture est relativement simple.

Si vous avez de bonnes idées, vous pouvez les laisser un commentaire, je les apprendrai et les pratiquerai avant de les partager.

Merci beaucoup.

Voici le contenu complet de cet article, j'espère qu'il vous aidera dans vos études, et j'espère que vous soutiendrez également le tutoriel de cri.

Déclaration : le contenu de cet article est tiré d'Internet, propriété des auteurs respectifs, le contenu est contribué et téléversé par les utilisateurs d'Internet, ce site ne détient pas de droits de propriété, n'a pas été traité par l'éditeur humain et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer