如何使用正確的方法將表格資料匯出到 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中文網其他相關文章!