Maison >développement back-end >C++ >Comment exporter efficacement des données vers un fichier Excel à l'aide d'EPPlus ?
Comment exporter vers Excel ?
Le guide ne montre pas comment créer un fichier Excel, il montre un hack qui crée un fichier HTML avec un tableau . Excel essaiera d'importer des fichiers CSV ou HTML avec des tableaux en utilisant les paramètres par défaut, ce qui peut souvent échouer.
Il est beaucoup plus facile de créer un correct fichier Excel en utilisant une bibliothèque comme EPPlus.
I Je suis sûr que cela a déjà été répondu, mais je ne trouve pas de réponse montrant à la fois comment créer un fichier Excel à partir de données et définir le type de contenu approprié pour un xlsx. file.
EPPlus fournit les méthodes LoadFromDataTable et LoadFromCollection pour remplir une plage Excel avec des données extraites d'un DataTable ou d'une collection générique. Les noms de colonne ou de propriété sont utilisés respectivement comme en-têtes.
public ActionResult ExportData() { //Somehow, load data to a DataTable using (ExcelPackage package = new ExcelPackage()) { var ws = package.Workbook.Worksheets.Add("My Sheet"); //true generates headers ws.Cells["A1"].LoadFromDataTable(dataTable, true); var stream = new MemoryStream(); package.SaveAs(stream); string fileName = "myfilename.xlsx"; string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; stream.Position = 0; return File(stream, contentType, fileName); } }
LoadFromDataTable ou LoadFromCollection renvoient une plage de cellules Excel qui peut être utilisée pour formater le tableau :
var range=ws.Cells["A1"].LoadFromDataTable(table); range.Style.Numberformat.Format = "#,##0.00"; range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
Vous pouvez également postuler un style de tableau à la plage, ou transmettez le style souhaité à LoadFromDataTable ou LoadFromCollection, Par exemple :
ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1);
Le wiki Githup de la bibliothèque montre comment formater le résultat, générer des formules, des tableaux croisés dynamiques, gérer des tableaux, etc.
L'enregistrement dans un MemoryStream peut être un problème si vous souhaitez créer une feuille relativement grande. Écrire les mêmes données deux fois, une fois dans MemoryStream, puis les copier dans la sortie, gaspille des cycles. Écrire directement dans le flux de sortie à partir d’une action MVC est cependant une mauvaise pratique. L'astuce consiste à créer un FileResult personnalisé qui gère les packages EPPlus et à le renvoyer à la place du FileResult renvoyé par File, par exemple :
public class EpplusResult:FileResult { public EpplusResult(ExcelPackage package) : base("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { if (package == null) { throw new ArgumentNullException("package"); } Package = package; } public ExcelPackage Package { get; private set; } protected override void WriteFile(HttpResponseBase response) { // grab chunks of data and write to the output stream Stream outputStream = response.OutputStream; using (Package) { Package.SaveAs(outputStream); } } }
Ce qui vous permet d'écrire l'action suivante :
public FileResult ExportData() { ExcelPackage package = new ExcelPackage(); var ws = package.Workbook.Worksheets.Add("My Sheet"); ... ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1); return new EpplusResult(package){FileDownloadName = "SomeFile.xlsx"}; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!