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

Implementazione di funzionalità di generazione e download di Excel in Asp.net MVC

Questo articolo condivide un esempio di codice per la generazione e il download di Excel in Asp.net MVC, per riferimento, il contenuto dettagliato è il seguente

A causa delle esigenze del progetto, è necessario esportare il file Excel con condizioni specifiche. Dopo un po' di sforzi, è stato finalmente realizzato.

Ora copio e condivido il codice

(Condivido qui parte del codice delle classi ausiliarie del mio progetto)

Il nostro progetto utilizza il modello Asp.Net MVC4.0.

Ogni ActionResult restituirà necessariamente una View o Json (i parametri di View o Json sono di tipo object)

Quindi abbiamo bisogno di una classe pubblica per definire uniformemente lo stato di 'successo o fallimento' delle operazioni o i messaggi di ritorno delle operazioni, e per favorire l'uniformità dell'uso di jquery $.get() e $.post() quando si ricevono i parametri di ritorno.

Di seguito è riportato il classe StatusMessageData.(Naturalmente, se si desidera esportare solo Excel, questa classe non è necessaria da definire.)

/// <summary>
 /// Aiuta nel trasmissione dei dati di StatusMessage
 /// </summary>
 [Serializable]
 public sealed class StatusMessageData
 {
  private StatusMessageType messageType;
  /// <summary>
  /// Categoria del messaggio di avviso
  /// </summary>
  public StatusMessageType MessageType
  {
   get { return messageType; }
   set { messageType = value; }
  };
  private string messageContent = string.Empty;
  /// <summary>
  /// Contenuto informativo
  /// </summary>
  public string MessageContent
  {
   get { return messageContent; }
   set { messageContent = value; }
  };
  private object data;
  /// <summary>
  /// Dati 
  /// </summary>
  public object Data
  {
   get { return data; }
   set { data = value; }
  };
  /// <summary>
  /// Costruttore
  /// </summary>
  /// <param name="messageType">Tipo del messaggio</param>
  /// <param name="messageContent">Contenuto del messaggio</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>
 /// Categoria del messaggio di avviso
 /// </summary>
 public enum StatusMessageType
 {
  /// <summary>
  /// Successo
  /// </summary>
  Success = 1,
  /// <summary>
  /// Errore
  /// </summary>
  Error = -1,
  /// <summary>
  /// Messaggio di avviso
  /// </summary>
  Hint = 0,
  /// <summary>
  /// Promemoria di login
  /// </summary>
  Login = 5,
  /// <summary>
  /// Avviso di reindirizzamento
  /// </summary>
  Redirect = 6,
 };

Definire ExportExcel ActionResult nel Controller

[HttpPost]
  [HttpPost]
  {
   public ActionResult ExportExcel(SearchModel model)
   StatusMessageData result = new StatusMessageData();
   {
    result.MessageType = StatusMessageType.Error;
    if (model.Data == null || model.Data.Count <= 0)
    return Json(result);
   };
   result.MessageContent = "Non ci sono dati da scaricare";
   string fileglobal = "";
   //Organizzare la tabella Excel
   StringBuilder sb = new StringBuilder(400);
   sb.Append("<table cellspacing='0' rules='all' border='1'>");
   sb.Append("<tr>");
   sb.Append("<thead>");
   sb.Append("<th>Colonna 1</th>");
   sb.Append("<th>Colonna 2</th>");
   sb.Append("<th>Colonna 3</th>");
   sb.Append("</tr>");
   sb.Append("<th>Colonna 4</th>");
   sb.Append("</thead>");
   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>");
    //Scrivere il file in formato UTF8
    byte[] contentBytes = Encoding.UTF8.GetBytes(sb.ToString());
    string rootDirServerPath = "Salvare i file generati nel percorso di nome di directory specificato";
    //Poiché il nostro progetto scarica file Excel senza casi di concorrenza, è sufficiente utilizzare l'anno, il mese, il giorno, l'ora, i minuti e i secondi per nome di file per evitare problemi di nomi di file duplicati.
    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);
  }; 

Dopo aver completato l'operazione di generazione di Excel, effettuare una chiamata asincrona nella pagina.

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

Ecco tutte le operazioni relative alla generazione e al download di Excel nel nostro progetto.

Le considerazioni sono state piuttosto poche, quindi è stato scritto in modo piuttosto semplice.

Se hai buoni suggerimenti, puoi lasciare un messaggio, e sicuramente imparerò e praticherò bene prima di condividerlo.

Grazie infinite.

Questo è tutto il contenuto dell'articolo, spero che sia utile per la tua apprendimento, e ti prego di supportare e urlare le lezioni.

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta agli autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato elaborato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito cancellerà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare