如何将数据导出到 Excel
提供的指南演示了使用表格生成 HTML 文件的解决方法,但这种方法在以下情况下可能不可靠: Excel 解释并导入这些文件。更有效的方法是使用 EPPlus 等库创建专用 Excel 文件。
使用 EPPlus
EPPlus 提供 LoadFromDataTable 和 LoadFromCollection 方法来填充 Excel 范围分别使用数据表或通用集合中的数据。列或属性名称在加载期间用作标题。
示例代码:
public ActionResult ExportData() { DataTable dataTable = GetData(); // Method to retrieve data using (ExcelPackage package = new ExcelPackage()) { var ws = package.Workbook.Worksheets.Add("My Sheet"); ws.Cells["A1"].LoadFromDataTable(dataTable, true); // Load with true to include headers 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); } }
格式和样式:
加载数据后,您可以进一步自定义 Excel 并设置样式range:
var range = ws.Cells["A1"].LoadFromDataTable(table); range.Style.Numberformat.Format = "#,##0.00"; // Set number format range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; // Set horizontal alignment
自定义输出:
为了缓解创建大文件时的潜在问题,或避免重复写入,您可以为 EPPlus 创建自定义 FileResult 处理程序packages:
public class EpplusResult : FileResult { public EpplusResult(ExcelPackage package) : base("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { Package = package; } public ExcelPackage Package { get; private set; } protected override void WriteFile(HttpResponseBase response) { using (Package) { Package.SaveAs(response.OutputStream); } } }
这个自定义结果可以在控制器中使用action:
public FileResult ExportData() { ExcelPackage package = new ExcelPackage(); var ws = package.Workbook.Worksheets.Add("My Sheet"); ... // Load and format data return new EpplusResult(package) { FileDownloadName = "SomeFile.xlsx" }; }
此方法可确保直接写入输出流,从而优化大文件的性能。
以上是如何使用EPPlus高效导出数据到Excel?的详细内容。更多信息请关注PHP中文网其他相关文章!