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