如何使用正确的方法将表数据导出到 Excel 并为 Excel (xlsx) 文件设置正确的 MIME 类型?
提供的指南未演示如何创建 Excel 文件;相反,它采用了一种解决方法,生成包含表格的 HTML 文件。当尝试导入包含不遵守其默认设置的表格的 CSV 或 HTML 文件时,Excel 可能会遇到格式错误。
使用 EPPlus 创建真正的 Excel 文件要简单得多。 EPPlus 中的 LoadFromDataTable 和 LoadFromCollection 可用于使用 DataTable 或通用集合中的数据填充 Excel 范围。分别使用列名称或属性名称生成标题。
public ActionResult ExportData() { // Load data into 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 和 LoadFromCollection 返回可用于将格式应用于表格的 Excel 单元格范围:
var range = ws.Cells["A1"].LoadFromDataTable(table); range.Style.Numberformat.Format = "#,##0.00"; range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
此外,您可以将表格样式应用于范围:
ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1);
格式、公式、数据透视表和表处理都可以在库的 GitHub wiki 中找到。
由于重复的数据写入(到内存和输出流),保存到 MemoryStream 可能不适合较大的工作表。但是,不鼓励直接从 MVC 操作返回 FileResult。解决方案是创建一个专为 EPPlus 包定制的 FileResult:
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) { Package.SaveAs(response.OutputStream); } }
这允许您在操作中执行以下操作:
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"}; }
以上是如何使用正确的 MIME 类型和格式将 DataTable 数据导出到 Excel (.xlsx) 文件?的详细内容。更多信息请关注PHP中文网其他相关文章!