如何匯出到 Excel?
本指南沒有展示如何建立 Excel 文件,而是展示了使用表格建立 HTML 文件的技巧。 Excel 會嘗試使用預設設定匯入帶有表格的 csv 或 HTML 文件,但這通常會失敗。
使用 EPPlus 等程式庫建立正確的 Excel 檔案要容易得多。
I我確信這個問題之前已經得到解答,但我找不到一個答案來說明如何從資料建立Excel 檔案並為xlsx 設定正確的內容類型file.
EPPlus 提供了LoadFromDataTable 和LoadFromCollection方法,用於使用從DataTable 或通用集合中提取的資料填入Excel 範圍。列或屬性名稱分別用作標題。
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 或LoadFromCollection 傳回可用於格式化表格的Excel 儲存格範圍:
var range=ws.Cells["A1"].LoadFromDataTable(table); range.Style.Numberformat.Format = "#,##0.00"; range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
您也可以套用將表格樣式傳遞給範圍,或是將所需的樣式傳遞給LoadFromDataTable 或LoadFromCollection,例如:
ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1);
這個函式庫的 Githup wiki 展示如何格式化結果、產生公式、資料透視表、處理表等。
如果您想創建,保存到 MemoryStream 可能是一個問題相對較大的紙張。將相同的資料寫入兩次,一次寫入 MemoryStream,然後將其複製到輸出,這會浪費週期。不過,直接從 MVC 操作寫入輸出流是一種不好的做法。訣竅是建立一個處理 EPPlus 套件的自訂 FileResult 並返回它,而不是 File 返回的 FileResult,例如:
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); } } }
這允許您編寫以下操作:
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"}; }
以上是如何使用EPPlus高效地將資料匯出到Excel文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!