使用 IRONXL 如何不使用Interop在Excel中創建樞紐分析表 Jordi Bardia 更新:2026年3月1日 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 使用 C# 在 Excel 中建立資料透視表非常簡單,只需選擇合適的函式庫即可-Excel 互通 需要每台機器上都安裝 Office,而IronXL可以在任何執行.NET 的環境中執行。本指南將透過完整的程式碼範例詳細介紹這兩種方法,涵蓋設定、資料聚合、欄位配置和部署注意事項,以便您根據專案需求做出正確的選擇。 Excel 互通 和IronXL有什麼不同? 在編寫任何一行程式碼之前,了解每種方法的底層原理會很有幫助。 Excel 互通 使用COM(元件物件模型)直接從 C# 驅動 Microsoft Excel。 .NET程序會與正在執行的 Excel 執行個體通信,這表示電腦上必須安裝 Excel。您操作的每個物件(工作簿、工作表、區域、透視快取)都是 COM 包裝器,必須明確釋放每個包裝器,以避免進程洩漏。 IronXL採取了一條截然不同的道路。 它直接讀取和寫入Open XML 檔案格式,完全無需啟動 Excel。 最終得到的是一個標準的.NET庫,它具有熟悉的物件模式、垃圾回收內存,並且不依賴 Office 安裝或授權。 這種架構使得IronXL適用於伺服器端工作負載、Docker 容器、Linux 主機以及任何.NET 6、 .NET 8 或.NET 10 環境。 Excel 互通 與IronXL比較概覽 標準 Excel 互通 IronXL 辦公室要求 是的 不 僅限 Windows 系統 是的 否——跨平台 記憶體管理 手動 COM 版本 自動(.NET GC) 伺服器部署 難的 直截了當 原生透視表 完整的 Excel 透視表 API 透過 LINQ 進行資料聚合 需要許可證 辦公許可證 IronXL僅限授權 如何安裝各個函式庫? 設定 Excel 互通 Excel 互通 以NuGet套件的形式提供。 在您的專案中執行以下任一命令: Install-Package Microsoft.Office.Interop.Excel dotnet add package Microsoft.Office.Interop.Excel Install-Package Microsoft.Office.Interop.Excel dotnet add package Microsoft.Office.Interop.Excel SHELL 請注意,僅此軟體包是不夠的——目標電腦必須安裝匹配版本的 Microsoft Excel 並已獲得正確的許可。 這種依賴關係排除了大多數伺服器、容器和雲端場景。 設定IronXL 透過NuGet安裝IronXL ,無需其他系統需求: Install-Package IronXl.Excel dotnet add package IronXl.Excel Install-Package IronXl.Excel dotnet add package IronXl.Excel SHELL 安裝完成後,您可以在任何支援.NET 的平台上立即開始讀取和寫入 Excel 檔案。 無需Office許可證,無需COM註冊,無需伺服器配置。 有關其他選項,包括離線安裝和項目參考設置,請參閱IronXL安裝指南。 立即開始在您的項目中使用 IronXL 並免費試用。 第一步: 免費啟動 如何使用 C# Interop 建立 Excel 資料透視表? Interop 透視表工作流程遵循嚴格的順序:從來源範圍建立透視緩存,然後在單獨的工作表上建立 PivotTable 對象,然後配置欄位方向。 以下範例使用與.NET 10 相容的頂級 C# 語句: using Excel = Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; // Launch Excel and set up workbooks var excelApp = new Excel.Application(); excelApp.Visible = false; var workbook = excelApp.Workbooks.Add(); var dataSheet = (Excel.Worksheet)workbook.Worksheets[1]; dataSheet.Name = "SalesData"; var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add(); pivotSheet.Name = "Pivot"; // Populate header row dataSheet.Cells[1, 1] = "Product"; dataSheet.Cells[1, 2] = "Region"; dataSheet.Cells[1, 3] = "Sales"; // Add sample data rows object[,] rows = { { "Laptop", "不rth", 1200 }, { "Laptop", "South", 1500 }, { "Phone", "不rth", 800 }, { "Phone", "South", 950 }, { "Tablet", "East", 600 }, { "Tablet", "West", 750 }, { "Monitor", "不rth", 400 }, { "Monitor", "South", 500 }, { "Keyboard", "East", 300 }, }; for (int i = 0; i < rows.GetLength(0); i++) { dataSheet.Cells[i + 2, 1] = rows[i, 0]; dataSheet.Cells[i + 2, 2] = rows[i, 1]; dataSheet.Cells[i + 2, 3] = rows[i, 2]; } // Build pivot cache from source range Excel.Range dataRange = dataSheet.Range["A1:C10"]; Excel.PivotCache pivotCache = workbook.PivotCaches().Create( Excel.XlPivotTableSourceType.xlDatabase, dataRange); // Create the PivotTable on the pivot sheet Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables(); Excel.PivotTable pivotTable = pivotTables.Add( pivotCache, pivotSheet.Range["A3"], "SalesPivot"); // Assign field orientations ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation = Excel.XlPivotFieldOrientation.xlRowField; ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation = Excel.XlPivotFieldOrientation.xlColumnField; ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation = Excel.XlPivotFieldOrientation.xlDataField; // Enable grand totals pivotTable.RowGrand = true; pivotTable.ColumnGrand = true; // Save and close workbook.SaveAs(@"C:\output\pivot_interop.xlsx"); workbook.Close(false); excelApp.Quit(); // Release every COM object -- skipping any of these causes Excel to stay in memory Marshal.ReleaseComObject(pivotTable); Marshal.ReleaseComObject(pivotTables); Marshal.ReleaseComObject(pivotCache); Marshal.ReleaseComObject(dataRange); Marshal.ReleaseComObject(pivotSheet); Marshal.ReleaseComObject(dataSheet); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(excelApp); using Excel = Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; // Launch Excel and set up workbooks var excelApp = new Excel.Application(); excelApp.Visible = false; var workbook = excelApp.Workbooks.Add(); var dataSheet = (Excel.Worksheet)workbook.Worksheets[1]; dataSheet.Name = "SalesData"; var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add(); pivotSheet.Name = "Pivot"; // Populate header row dataSheet.Cells[1, 1] = "Product"; dataSheet.Cells[1, 2] = "Region"; dataSheet.Cells[1, 3] = "Sales"; // Add sample data rows object[,] rows = { { "Laptop", "不rth", 1200 }, { "Laptop", "South", 1500 }, { "Phone", "不rth", 800 }, { "Phone", "South", 950 }, { "Tablet", "East", 600 }, { "Tablet", "West", 750 }, { "Monitor", "不rth", 400 }, { "Monitor", "South", 500 }, { "Keyboard", "East", 300 }, }; for (int i = 0; i < rows.GetLength(0); i++) { dataSheet.Cells[i + 2, 1] = rows[i, 0]; dataSheet.Cells[i + 2, 2] = rows[i, 1]; dataSheet.Cells[i + 2, 3] = rows[i, 2]; } // Build pivot cache from source range Excel.Range dataRange = dataSheet.Range["A1:C10"]; Excel.PivotCache pivotCache = workbook.PivotCaches().Create( Excel.XlPivotTableSourceType.xlDatabase, dataRange); // Create the PivotTable on the pivot sheet Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables(); Excel.PivotTable pivotTable = pivotTables.Add( pivotCache, pivotSheet.Range["A3"], "SalesPivot"); // Assign field orientations ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation = Excel.XlPivotFieldOrientation.xlRowField; ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation = Excel.XlPivotFieldOrientation.xlColumnField; ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation = Excel.XlPivotFieldOrientation.xlDataField; // Enable grand totals pivotTable.RowGrand = true; pivotTable.ColumnGrand = true; // Save and close workbook.SaveAs(@"C:\output\pivot_interop.xlsx"); workbook.Close(false); excelApp.Quit(); // Release every COM object -- skipping any of these causes Excel to stay in memory Marshal.ReleaseComObject(pivotTable); Marshal.ReleaseComObject(pivotTables); Marshal.ReleaseComObject(pivotCache); Marshal.ReleaseComObject(dataRange); Marshal.ReleaseComObject(pivotSheet); Marshal.ReleaseComObject(dataSheet); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(excelApp); $vbLabelText $csharpLabel 每個 COM 包裝器都需要一個符合的 Marshal.ReleaseComObject 呼叫。 即使缺少一個引用,也會導致 Excel 程序在後台持續運行,消耗記憶體和檔案句柄,直到宿主程序結束。 清理工作量會隨著電子表格操作的複雜程度而增加。 如何用IronXL達到相同的效果? IronXL不像 Interop 那樣公開原生透視表 API——Open XML 透視表格式有數百個 XML 屬性,大多數業務需求可以透過用純 C# 編寫的顯式 LINQ 聚合更可靠地滿足。 輸出結果是一個乾淨的匯總表,當檔案開啟時,該匯總表能夠正確地重新計算,而無需依賴 Excel 刷新資料透視表快取。 using IronXL; using System.Data; // Create workbook and populate source data WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); WorkSheet dataSheet = workbook.CreateWorkSheet("SalesData"); dataSheet["A1"].Value = "Product"; dataSheet["B1"].Value = "Region"; dataSheet["C1"].Value = "Sales"; object[,] rows = { { "Laptop", "不rth", 1200 }, { "Laptop", "South", 1500 }, { "Phone", "不rth", 800 }, { "Phone", "South", 950 }, { "Tablet", "East", 600 }, { "Tablet", "West", 750 }, { "Monitor", "不rth", 400 }, { "Monitor", "South", 500 }, { "Keyboard", "East", 300 }, }; for (int i = 0; i < rows.GetLength(0); i++) { dataSheet[$"A{i + 2}"].Value = rows[i, 0]; dataSheet[$"B{i + 2}"].Value = rows[i, 1]; dataSheet[$"C{i + 2}"].Value = rows[i, 2]; } // Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout DataTable table = dataSheet["A1:C10"].ToDataTable(true); var summary = table.AsEnumerable() .GroupBy(row => row.Field<string>("Product")) .Select((group, idx) => new { Product = group.Key, TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])), RegionCount = group.Select(r => r.Field<string>("Region")).Distinct().Count(), RowIndex = idx + 2 }) .OrderByDescending(x => x.TotalSales); // Write the summary sheet WorkSheet summarySheet = workbook.CreateWorkSheet("Summary"); summarySheet["A1"].Value = "Product"; summarySheet["B1"].Value = "Total Sales"; summarySheet["C1"].Value = "Regions"; foreach (var item in summary) { summarySheet[$"A{item.RowIndex}"].Value = item.Product; summarySheet[$"B{item.RowIndex}"].Value = (double)item.TotalSales; summarySheet[$"C{item.RowIndex}"].Value = item.RegionCount; } // Apply currency format to the sales column summarySheet["B:B"].FormatString = "$#,##0.00"; // Bold the header row summarySheet["A1:C1"].Style.Font.Bold = true; // Save -- no COM cleanup needed workbook.SaveAs(@"C:\output\analysis_ironxl.xlsx"); using IronXL; using System.Data; // Create workbook and populate source data WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); WorkSheet dataSheet = workbook.CreateWorkSheet("SalesData"); dataSheet["A1"].Value = "Product"; dataSheet["B1"].Value = "Region"; dataSheet["C1"].Value = "Sales"; object[,] rows = { { "Laptop", "不rth", 1200 }, { "Laptop", "South", 1500 }, { "Phone", "不rth", 800 }, { "Phone", "South", 950 }, { "Tablet", "East", 600 }, { "Tablet", "West", 750 }, { "Monitor", "不rth", 400 }, { "Monitor", "South", 500 }, { "Keyboard", "East", 300 }, }; for (int i = 0; i < rows.GetLength(0); i++) { dataSheet[$"A{i + 2}"].Value = rows[i, 0]; dataSheet[$"B{i + 2}"].Value = rows[i, 1]; dataSheet[$"C{i + 2}"].Value = rows[i, 2]; } // Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout DataTable table = dataSheet["A1:C10"].ToDataTable(true); var summary = table.AsEnumerable() .GroupBy(row => row.Field<string>("Product")) .Select((group, idx) => new { Product = group.Key, TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])), RegionCount = group.Select(r => r.Field<string>("Region")).Distinct().Count(), RowIndex = idx + 2 }) .OrderByDescending(x => x.TotalSales); // Write the summary sheet WorkSheet summarySheet = workbook.CreateWorkSheet("Summary"); summarySheet["A1"].Value = "Product"; summarySheet["B1"].Value = "Total Sales"; summarySheet["C1"].Value = "Regions"; foreach (var item in summary) { summarySheet[$"A{item.RowIndex}"].Value = item.Product; summarySheet[$"B{item.RowIndex}"].Value = (double)item.TotalSales; summarySheet[$"C{item.RowIndex}"].Value = item.RegionCount; } // Apply currency format to the sales column summarySheet["B:B"].FormatString = "$#,##0.00"; // Bold the header row summarySheet["A1:C1"].Style.Font.Bold = true; // Save -- no COM cleanup needed workbook.SaveAs(@"C:\output\analysis_ironxl.xlsx"); $vbLabelText $csharpLabel 無需釋放 COM 對象,無需終止 Excel 進程,也無需管理 Office 授權。 同一段程式碼無需修改即可在 Linux、macOS 和 Windows 上編譯運行。 有關聚合 API 的更多詳細信息,請訪問IronXL WorkSheet 文件。 輸出 部署和維護的主要差異是什麼? 部署要求 部署基於互通性的應用程式需要驗證目標環境是否執行 Windows,是否安裝了正確的 Office 版本,以及伺服器上是否配置了 COM 自動化權限。 雲端託管環境和容器化工作負載通常無法在不添加虛擬化 Windows 桌面基礎架構的情況下滿足這些要求,但這會顯著增加成本和操作複雜性。 IronXL沒有這樣的限制。 新增NuGet包,將目標框架設定為.NET 6 或更高版本,應用程式即可部署到任何主機,包括 Linux 容器、Linux 上的 Azure 應用程式服務、AWS Lambda 和本機 Windows 伺服器。 IronXL系統要求頁面列出了完整的相容性矩陣。 錯誤處理和調試 互通失敗表現為 COM 異常(COMException),這些異常很難對應到使用者可見的訊息。 已安裝的 Office 版本與 Interop 組件之間的版本不符會導致另一種故障模式。 調試這些問題通常需要在開發機器上重現完全相同的 Office 版本。 IronXL拋出帶有描述性訊息的標準 System.Exception 子類別。 您可以將檔案操作封裝在 try-catch 區塊中,並在不了解 COM 錯誤代碼的情況下提供有意義的回饋。 IronXL故障排除指南涵蓋了常見異常及其解決方法。 記憶體和效能 COM 物件持有非託管記憶體。 如果你的程式碼處理很多工作表或在循環中運行,未能正確釋放每個引用會導致記憶體隨著時間的推移而增長——這個問題很難被發現,直到它導致生產事故。 由於 Interop 只驅動一個 Excel 窗口,因此它本質上也是單線程的。 IronXL使用由.NET垃圾回收器支援的託管物件。 當物件超出作用域時,記憶體會自動回收。 並行處理多個工作簿非常簡單,因為沒有需要用鎖定來保護的共用 COM 狀態。 如何選擇這兩種方法? 選擇合適的工具取決於兩個限制條件:程式碼運行的位置,以及是否需要原生透視表 XML。 在以下情況下選擇 Excel 互通: 此工作負載僅在已安裝 Office 的 Windows 桌面電腦上執行。 輸出檔案必須完全符合原始資料透視表格式(切片器、分組日期欄位、計算項目)。 您維護現有的互通程式碼庫,因此沒有必要進行完全重寫。 選擇IronXL 的情況: 該應用程式運行在伺服器、容器或雲端函數上 需要跨平台或Linux部署 您需要的是可使用單元測試進行測試的資料聚合邏輯,而不是依賴 Excel 流程的邏輯。 您需要大規模或平行處理 Excel 檔案。 對於大多數新的.NET 10 專案而言, IronXL是實際的預設選擇。 IronXL庫還涵蓋了在 C# 中讀取 Excel 檔案、建立圖表、應用儲存格樣式、使用公式以及將 Excel 資料匯出到 DataTable——從而減少了您的技術堆疊中對多個庫的需求。 IronXL還有哪些功能支援數據分析? 除了基本的聚合功能外, IronXL還提供了多種功能,支援更豐富的資料分析工作流程: 資料排序和篩選 在編寫總計表之前,您可以按升序或降序對資料範圍進行排序。 這樣可以確保輸出始終以一致的順序呈現數據,從而使下游處理更具可預測性。 有關範圍級排序選項,請參閱IronXL排序文件。 應用條件格式 透過程式化方式套用條件格式規則,突顯異常值或閾值。 例如,當銷售額低於目標時,您可以將匯總表中的儲存格顏色設為紅色,從而提供一目了然的視圖,而無需最終使用者手動配置規則。 讀取現有 Excel 文件 如果來源資料來自現有電子表格而不是資料庫,則可以直接使用 WorkBook.Load 載入它: using IronXL; WorkBook existing = WorkBook.Load(@"C:\data\sales_report.xlsx"); WorkSheet sheet = existing.WorkSheets[0]; // Read column C starting at row 2 var salesValues = sheet["C2:C100"] .Where(cell => cell.Value != null && cell.Value.ToString() != string.Empty) .Select(cell => cell.DecimalValue) .ToList(); decimal total = salesValues.Sum(); Console.WriteLine($"Total sales from file: {total:C}"); using IronXL; WorkBook existing = WorkBook.Load(@"C:\data\sales_report.xlsx"); WorkSheet sheet = existing.WorkSheets[0]; // Read column C starting at row 2 var salesValues = sheet["C2:C100"] .Where(cell => cell.Value != null && cell.Value.ToString() != string.Empty) .Select(cell => cell.DecimalValue) .ToList(); decimal total = salesValues.Sum(); Console.WriteLine($"Total sales from file: {total:C}"); $vbLabelText $csharpLabel 此模式適用於 .csv 以及IronXL支援的其他格式。 有關支援的格式的詳細信息,請參閱IronXL文件格式文件。 匯出為 CSV 產生匯總工作表後,您可以將其匯出為 CSV 文件,以便供不支援 Excel 的下游系統使用: workbook.SaveAsCsv(@"C:\output\summary.csv"); workbook.SaveAsCsv(@"C:\output\summary.csv"); $vbLabelText $csharpLabel 這在 ETL 管道中尤其有用,因為最終用戶是資料庫導入工具或資料倉儲載入器。 如何免費開始使用IronXL ? IronXL提供免費試用許可,讓您無需訂閱即可評估所有功能。 試用版會在輸出檔上新增浮水印,套用正式版許可證金鑰後即可移除浮水印。 若要在程式碼中啟動許可證金鑰,請在執行任何IronXL操作之前進行設定: IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"; IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"; $vbLabelText $csharpLabel 您也可以透過環境變數(IRONXL_LICENSEKEY)或在ASP.NET Core專案中透過 appsettings.json 來設定金鑰。 IronXL許可頁面描述了所有可用的級別,包括團隊和組織選項。 對於生產部署,請查看IronXL部署文件和更廣泛的IronXL教學庫,以了解涵蓋ASP.NET Core、Azure Functions 和 Docker 的模式。 如何邁出下一步? C# 中的 Excel 資料透視表並不一定意味著對 Office 的依賴和 COM 的複雜性。 使用IronXL,您可以編寫可在任何平台上運行的純.NET程式碼,自動處理內存,並自然地與單元測試框架和 CI/CD 管道整合。 下載免費的IronXL試用版,並使用本指南中的範例對您自己的資料執行該範例。 如果您遇到任何問題, IronXL社群論壇和支援入口網站對試用用戶和授權用戶均開放。 準備部署時,請查看授權選項,找到適合您團隊規模和使用量的方案。 常見問題解答 使用IronXL而非Excel Interop來創建樞紐分析表的優勢是什麼? 與傳統的 Excel Interop 相比,IronXL 提供了一種更現代、更有效率的方式來建立 Excel 檔案中的資料透視表。它簡化了流程,並減少了所需的樣板程式碼量。 我可以使用 IronXL 和 C# 在 Excel 中建立資料透視表嗎? 是的,IronXL 提供了一種使用 C# 在 Excel 中建立資料透視表的簡單方法。它允許開發人員輕鬆操作 Excel 文件,而無需依賴 Excel Interop。 IronXL 與 .NET 應用程式相容嗎? IronXL 與 .NET 應用程式完全相容,因此對於希望將 Excel 功能整合到其 C# 專案中的開發人員來說,它是一個絕佳的選擇。 IronXL 是否需要係統上安裝 Excel? 不,IronXL 不需要在系統上安裝 Microsoft Excel。它可以獨立運行,這比需要安裝 Excel 的 Excel Interop 具有顯著優勢。 IronXL 如何簡化建立資料透視表的流程? IronXL 透過提供使用者友善的 API 簡化了流程,減少了對大量樣板程式碼的需求,從而使開發過程更快、更有效率。 使用 IronXL 的系統需求是什麼? IronXL 需要 .NET Framework相容的環境,但不需要安裝 Microsoft Excel,這簡化了部署並減少了依賴項。 IronXL 能有效處理大型 Excel 文件嗎? 是的,IronXL 的設計宗旨就是高效處理大型 Excel 文件,因此適用於需要處理大量資料的商業應用。 與 Excel Interop 相比,IronXL 的學習曲線是否更陡峭? IronXL 的設計直觀易學,並配有全面的文件和範例,與更複雜的 Excel Interop 相比,更容易上手。 除了建立資料透視表之外,IronXL 還能執行哪些類型的 Excel 操作? IronXL 可以執行各種 Excel 操作,包括讀取和寫入 Excel 檔案、設定儲存格格式以及應用公式等。 IronXL 能否將資料透視表匯出為 Excel 以外的其他格式? 雖然 IronXL 主要專注於 Excel 操作,但它也支援將資料匯出為其他格式,例如 CSV 和 PDF,具體取決於您的專案要求。 Jordi Bardia 立即與工程團隊聊天 軟體工程師 Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。 相關文章 更新2026年3月1日 在ASP.NET C#中下載Excel文件:將數據匯出到XLSX,CSV和更多格式 使用C#和IronXL在ASP.NET Core中下載Excel文件。從MVC控制器中匯出數據到XLSX, CSV和XML,附有MemoryStream和File()返回。包括代碼範例。 閱讀更多 更新2026年3月1日 如何在Blazor中使用IronXL匯出Excel文件 學習如何在Blazor伺服器應用程式中使用IronXL将數據匯出到Excel。此指南涵蓋專案設置、服務設計、條件格式化、多表報告和錯誤處理,附有完整的C#代碼範例。 閱讀更多 更新2026年2月27日 如何在C#中而不是使用StreamReader來讀取Excel文件 了解StreamReader為何無法讀取Excel文件,並學習如何使用IronXL加載來自磁盤或內存流的XLSX和XLS工作簿。 閱讀更多 在ASP.NET C#中下載Excel文件:將數據匯出到XLSX,CSV和更多格式如何在Blazor中使用IronXL匯...
更新2026年3月1日 在ASP.NET C#中下載Excel文件:將數據匯出到XLSX,CSV和更多格式 使用C#和IronXL在ASP.NET Core中下載Excel文件。從MVC控制器中匯出數據到XLSX, CSV和XML,附有MemoryStream和File()返回。包括代碼範例。 閱讀更多
更新2026年3月1日 如何在Blazor中使用IronXL匯出Excel文件 學習如何在Blazor伺服器應用程式中使用IronXL将數據匯出到Excel。此指南涵蓋專案設置、服務設計、條件格式化、多表報告和錯誤處理,附有完整的C#代碼範例。 閱讀更多
更新2026年2月27日 如何在C#中而不是使用StreamReader來讀取Excel文件 了解StreamReader為何無法讀取Excel文件,並學習如何使用IronXL加載來自磁盤或內存流的XLSX和XLS工作簿。 閱讀更多