
當需要從 ASP.NET Core 導出數據到 Excel 時,有幾個不同的選項。 如果您需要簡單的表格數據,那么生成一個 CSV 文件就足夠了。 如果您需要嵌入顏色和公式,您將需要更高級的東西。 讓我們從簡單的開始。
對於本文中的示例,我將使用帶有一些硬編碼數據的ASP.NET Core控制器。 在實際的應用程序中,這些數據將來自用戶輸入,數據庫或類似的數據:
1 public class HomeController : Controller 2 { 3 private List<User> users = new List<User> 4 { 5 new User { Id = 1, Username = "DoloresAbernathy" }, 6 new User { Id = 2, Username = "MaeveMillay" }, 7 new User { Id = 3, Username = "BernardLowe" }, 8 new User { Id = 4, Username = "ManInBlack" } 9 }; 10 11 public HomeController() 12 { 13 } 14 }
導出為CSV
導出數據的最簡單方法是作為逗號分隔值(CSV)文件。 有可用的NuGet軟件包可以幫助您解決此問題,但對於本文,我將手動創建CSV:
1 public IActionResult Csv() 2 { 3 var builder = new StringBuilder(); 4 builder.AppendLine("Id,Username"); 5 foreach (var user in users) 6 { 7 builder.AppendLine($"{user.Id},{user.Username}"); 8 } 9 10 return File(Encoding.UTF8.GetBytes(builder.ToString()), "text/csv", "users.csv"); 11 }
使用System.Text命名空間中可用的StringBuilder類,我在第一行中添加標題,然后為每個用戶添加一行。 最后,我使用ASP.NET Core中提供的File helper返回生成的CSV。 通過將內容作為文件返回,瀏覽器將自動將內容下載為名為users.csv的CSV文件。
導出為XLSX
如果您要導出的文件比簡單的表格數據復雜得多,則需要將數據導出為真實的Excel文件。 CSV文件不能包含顏色,公式等。
由於 XLSX 文件是基於 XML 的,您可以自己生成內容。 我不建議這樣做,因為格式很復雜,而且有很多好的 NuGet 包可用。 過去我一直在使用 ClosedXML 包,我很高興看到這個包仍然在開發和支持中。 Net Core. 我還研究了 EPPlus 和 DocumentFormat 等替代軟件包。 來自 Microsoft 的 OpenXml,但是它們都沒有提供 ClosedXML (IMO)這樣簡單的 API。
要使用ClosedXML生成XLSX文件,請先安裝以下NuGet軟件包:
Install-Package ClosedXML
然后添加一個新的控制器操作。 對於這篇文章,為了保持一致性,我已經像 CSV 例子中那樣格式化了輸出。 Closedxml 提供了一組豐富的特性,包括顏色、計算等等。 查看他們的文檔了解更多細節。 下面是代碼:
1 public IActionResult Excel() 2 { 3 using (var workbook = new XLWorkbook()) 4 { 5 var worksheet = workbook.Worksheets.Add("Users"); 6 var currentRow = 1; 7 worksheet.Cell(currentRow, 1).Value = "Id"; 8 worksheet.Cell(currentRow, 2).Value = "Username"; 9 foreach (var user in users) 10 { 11 currentRow++; 12 worksheet.Cell(currentRow, 1).Value = user.Id; 13 worksheet.Cell(currentRow, 2).Value = user.Username; 14 } 15 16 using (var stream = new MemoryStream()) 17 { 18 workbook.SaveAs(stream); 19 var content = stream.ToArray(); 20 21 return File( 22 content, 23 "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 24 "users.xlsx"); 25 } 26 } 27 }
我們來看看代碼。 為了創建 Excel 文檔,我正在創建一個新的 XLWorkbook。 在第5行中,我創建了一個名為 Users 的新工作表,您可以看到 ClosedXML 的好處。 Excel 工作表不能使用 CSV 文件。
與前面的示例一樣,我添加了一個標題行,並將用戶列表中的值放入以下行中。 這個 API 不需要太多的介紹,因為它非常容易理解。 使用工作表對象引用行和單元格。
最后,我將工作簿導出到流中,並將其作為文件從控制器返回。
事實證明,將數據從ASP.NET Core導出到Excel非常簡單。 根據輸出文件的要求,可以選擇CSV或XLSX。 由於ClosedXML是我的首選框架,因此我很想聽聽您使用優質Excel軟件包的經驗。
