使用 IRONXL 如何使用 IronXL 在 C# 中將 DataGridView 匯出至 Excel Jordi Bardia 更新:2026年3月1日 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 使用IronXL時,將資料從 DataGridView 匯出到 Excel 檔案只需要幾行 C# 程式碼。 建立一個 WorkBook,遍歷網格的列和行,將每個單元格的值寫入工作表,然後呼叫 SaveAs 產生一個完全格式化的 .xlsx 文件 -- 無需安裝 Microsoft Office。 如何設定用於匯出到 Excel 的 Windows 窗體專案? Windows Forms 是.NET生態系統中的基礎 GUI 函式庫,廣泛用於建立桌面應用程式。 DataGridView 控制項是其最常用的元件之一:它可以顯示、編輯和管理來自任何可綁定來源(例如 DataTable、資料庫查詢結果或記憶體清單)的表格資料。 將網格資料匯出到 Excel 可以滿足多種日常需求——向利害關係人發送報告、存檔快照以進行審計,或將資料輸入下游分析工具。 兩種傳統方法是 Microsoft Office Interop 和第三方程式庫。 Interop 要求在執行該應用程式的每台電腦上安裝 Excel,這會造成 COM 物件生命週期問題,並且在伺服器或雲端部署中效能較差。 IronXL 、ClosedXML 和 Syncfusion 等程式庫透過直接寫入 Open XML 檔案格式來避免這些問題,而無需任何 Office 依賴。 本指南示範了以.NET 10 為導向的 C# IronXL方法,儘管IronXL支援.NET Framework 4.6.2 和所有現代.NET版本。 先決條件 在編寫任何匯出程式碼之前,請確認以下各項已就緒: Visual Studio 2022 或更高版本 已安裝.NET 10 SDK 一個包含 DataGridView 控制項的 Windows 窗體應用程式項目 -NuGet訪問來安裝IronXL 如何安裝IronXL? 在 Visual Studio 中開啟程式包管理器控制台,然後執行下列任一命令: Install-Package IronXL dotnet add package IronXL Install-Package IronXL dotnet add package IronXL SHELL 或者,在解決方案資源管理器中右鍵單擊項目,選擇"管理NuGet套件" ,搜尋 IronXl.Excel,然後按"安裝" 。 安裝完成後,在任何使用 Excel 功能的檔案頂部新增IronXL using 指令: using IronXL; using System.Data; using IronXL; using System.Data; $vbLabelText $csharpLabel IronXL支援所有常見的電子表格格式: XLSX、XLS、CSV 和 TSV 。 本指南通篇使用 XLSX 格式,因為它是現代 Excel 版本的預設格式。 如何使用範例資料填充 DataGridView? 在本演練中,表單包含一個名為 @@--CODE-701--CODE-701 的 @@--CODE-700--CODE-701 的 @@--CODE-701 和一個名為 @@--CODE-702--CODE-702 的按鈕。 表格在表單的 Load 事件中填充,其中包含儲存在 DataTable 中的員工記錄: void Form1_Load(object sender, EventArgs e) { var dt = new DataTable(); // Define columns with the appropriate .NET type dt.Columns.Add("EmployeeID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Department", typeof(string)); dt.Columns.Add("Salary", typeof(decimal)); // Add sample rows dt.Rows.Add(101, "Sarah Johnson", "Engineering", 85000m); dt.Rows.Add(102, "Michael Chen", "Marketing", 72000m); dt.Rows.Add(103, "Emily Davis", "Finance", 91000m); dt.Rows.Add(104, "James Wilson", "Engineering", 78000m); DataGridView1.DataSource = dt; } void Form1_Load(object sender, EventArgs e) { var dt = new DataTable(); // Define columns with the appropriate .NET type dt.Columns.Add("EmployeeID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Department", typeof(string)); dt.Columns.Add("Salary", typeof(decimal)); // Add sample rows dt.Rows.Add(101, "Sarah Johnson", "Engineering", 85000m); dt.Rows.Add(102, "Michael Chen", "Marketing", 72000m); dt.Rows.Add(103, "Emily Davis", "Finance", 91000m); dt.Rows.Add(104, "James Wilson", "Engineering", 78000m); DataGridView1.DataSource = dt; } $vbLabelText $csharpLabel 每一列都定義了一個特定的.NET類型,以便後續的數值比較和格式化能夠正確進行。 DataSource 屬性將 DataTable 直接綁定至 DataGridView,表單開啟時,網格會自動呈現所有行。 在生產環境中,這些資料通常來自資料庫查詢、ORM 結果集或 REST API 回應,而不是硬編碼的值。 了解 DataGridView 資料模型 DataGridView 透過兩個集合公開其內容:Columns(用於元數據,例如 HeaderText 和列索引)和 Rows(用於實際資料單元格)。 每個 DataGridViewRow 包含一個按列位置索引的 Cells 集合。 每個單元格的 Value 屬性返回一個裝箱對象,您必須先將其強制轉換或轉換,然後才能將其寫入 Excel 單元格。 理解這種層次結構對於編寫可靠的匯出循環至關重要。 DataTable 在後台儲存鍵入的值,因此十進制工資在寫入IronXL工作表之前不需要字串轉換。 IronXL 的 SetCellValue 方法接受 bool, @@CODE-72。 如何將 DataGridView 資料匯出到帶有列標題的 Excel 檔案? 匯出邏輯位於按鈕的點擊事件處理程序中。 程式碼建立一個新的工作表,檢索預設工作表,將列標題寫入第一行,然後將每一行資料寫入列標題下方: void btnExport_Click(object sender, EventArgs e) { var workbook = WorkBook.Create(); var sheet = workbook.DefaultWorkSheet; // Write column headers to row index 0 for (int col = 0; col < DataGridView1.Columns.Count; col++) { sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText); } // Write data rows starting at row index 1 for (int row = 0; row < DataGridView1.Rows.Count; row++) { for (int col = 0; col < DataGridView1.Columns.Count; col++) { object? cellValue = DataGridView1.Rows[row].Cells[col].Value; if (cellValue is not null) { sheet.SetCellValue(row + 1, col, cellValue.ToString()!); } } } string outputPath = "EmployeeData.xlsx"; workbook.SaveAs(outputPath); MessageBox.Show("Export complete. File saved to: " + outputPath, "Success"); } void btnExport_Click(object sender, EventArgs e) { var workbook = WorkBook.Create(); var sheet = workbook.DefaultWorkSheet; // Write column headers to row index 0 for (int col = 0; col < DataGridView1.Columns.Count; col++) { sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText); } // Write data rows starting at row index 1 for (int row = 0; row < DataGridView1.Rows.Count; row++) { for (int col = 0; col < DataGridView1.Columns.Count; col++) { object? cellValue = DataGridView1.Rows[row].Cells[col].Value; if (cellValue is not null) { sheet.SetCellValue(row + 1, col, cellValue.ToString()!); } } } string outputPath = "EmployeeData.xlsx"; workbook.SaveAs(outputPath); MessageBox.Show("Export complete. File saved to: " + outputPath, "Success"); } $vbLabelText $csharpLabel WorkBook物件代表記憶體中的整個 Excel 檔案。 DefaultWorkSheet 傳回第一個工作表,而無需您明確建立工作表。 外層循環將 HeaderText 中的標題文字寫入第 0 行。 然後,嵌套循環遍歷每一行數據,檢查是否為空,然後將單元格值轉換為字串。 row + 1 偏移量會將資料移到標題行下方。 SaveAs 將完成的工作簿以Open XML XLSX 檔案的形式寫入指定路徑。 使用IronXL在 VB .NET 2010 中將 DataGridView 中的資料匯出到 Excel:圖 3 - Excel 輸出 產生的檔案可以在 Excel、Google Sheets 或任何可以讀取 XLSX 格式的應用程式中開啟。 列標題出現在第一行,所有資料行都按照它們在 DataGridView 中出現的順序排列。 如何將儲存格格式套用至匯出的Excel檔案? 簡單的資料轉儲功能正常,但不適合用於演示。 IronXL 的樣式 API 可讓您在儲存之前對任何儲存格區域套用粗體字型、背景顏色、文字顏色和數字格式: void ExportWithFormatting() { var workbook = WorkBook.Create(); var sheet = workbook.DefaultWorkSheet; // Write column headers for (int col = 0; col < DataGridView1.Columns.Count; col++) { sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText); } // Style the header row: bold white text on blue background var headerRange = sheet.GetRange("A1:D1"); headerRange.Style.Font.Bold = true; headerRange.Style.SetBackgroundColor("#4472C4"); headerRange.Style.Font.SetColor("#FFFFFF"); // Locate the Salary column index int salaryColIndex = -1; for (int i = 0; i < DataGridView1.Columns.Count; i++) { if (string.Equals(DataGridView1.Columns[i].HeaderText, "Salary", StringComparison.OrdinalIgnoreCase)) { salaryColIndex = i; break; } } // Write data rows, preserving numeric types for (int row = 0; row < DataGridView1.Rows.Count; row++) { if (DataGridView1.Rows[row].IsNewRow) continue; for (int col = 0; col < DataGridView1.Columns.Count; col++) { object? cellValue = DataGridView1.Rows[row].Cells[col].Value; if (cellValue is null) continue; int targetRow = row + 1; if (col == salaryColIndex) { // Write salary as a true numeric decimal if (decimal.TryParse(cellValue.ToString(), System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out decimal decValue)) { sheet.SetCellValue(targetRow, col, decValue); } else { sheet.SetCellValue(targetRow, col, cellValue.ToString()!); } } else { sheet.SetCellValue(targetRow, col, cellValue.ToString()!); } } } // Apply currency format to the salary column data range var salaryRange = sheet.GetRange("D2:D5"); salaryRange.FormatString = "$#,##0"; workbook.SaveAs("FormattedEmployeeData.xlsx"); } void ExportWithFormatting() { var workbook = WorkBook.Create(); var sheet = workbook.DefaultWorkSheet; // Write column headers for (int col = 0; col < DataGridView1.Columns.Count; col++) { sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText); } // Style the header row: bold white text on blue background var headerRange = sheet.GetRange("A1:D1"); headerRange.Style.Font.Bold = true; headerRange.Style.SetBackgroundColor("#4472C4"); headerRange.Style.Font.SetColor("#FFFFFF"); // Locate the Salary column index int salaryColIndex = -1; for (int i = 0; i < DataGridView1.Columns.Count; i++) { if (string.Equals(DataGridView1.Columns[i].HeaderText, "Salary", StringComparison.OrdinalIgnoreCase)) { salaryColIndex = i; break; } } // Write data rows, preserving numeric types for (int row = 0; row < DataGridView1.Rows.Count; row++) { if (DataGridView1.Rows[row].IsNewRow) continue; for (int col = 0; col < DataGridView1.Columns.Count; col++) { object? cellValue = DataGridView1.Rows[row].Cells[col].Value; if (cellValue is null) continue; int targetRow = row + 1; if (col == salaryColIndex) { // Write salary as a true numeric decimal if (decimal.TryParse(cellValue.ToString(), System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out decimal decValue)) { sheet.SetCellValue(targetRow, col, decValue); } else { sheet.SetCellValue(targetRow, col, cellValue.ToString()!); } } else { sheet.SetCellValue(targetRow, col, cellValue.ToString()!); } } } // Apply currency format to the salary column data range var salaryRange = sheet.GetRange("D2:D5"); salaryRange.FormatString = "$#,##0"; workbook.SaveAs("FormattedEmployeeData.xlsx"); } $vbLabelText $csharpLabel GetRange 方法接受標準 Excel 表示法 (A1:D1) 來選擇連續的儲存格區塊。 設定 Style.SetBackgroundColor 和 Style.Font.SetColor 會將這些格式套用於所選範圍內的每個儲存格。 對於數值列,將值寫成 decimal 而不是字串可以保持資料類型不變,這表示 Excel 可以正確套用 $#,##0 等數字格式。 以字串形式儲存的儲存格對數字格式代碼沒有回應。 您可以參考IronXL樣式文檔,擴展此模式以套用交替行底紋、列寬自動調整或凍結窗格。 如何將DataGridView資料匯出為CSV而不是XLSX格式? 某些工作流程需要 CSV 輸出,以便與舊系統或輕量級資料管道相容。 IronXL無需對主程式碼進行任何額外的配置變更即可處理 CSV 匯出: void ExportToCsv() { var workbook = WorkBook.Create(); var sheet = workbook.DefaultWorkSheet; for (int col = 0; col < DataGridView1.Columns.Count; col++) { sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText); } for (int row = 0; row < DataGridView1.Rows.Count; row++) { if (DataGridView1.Rows[row].IsNewRow) continue; for (int col = 0; col < DataGridView1.Columns.Count; col++) { object? cell = DataGridView1.Rows[row].Cells[col].Value; if (cell is not null) sheet.SetCellValue(row + 1, col, cell.ToString()!); } } // Saving with a .csv extension produces a comma-separated file workbook.SaveAs("EmployeeData.csv"); } void ExportToCsv() { var workbook = WorkBook.Create(); var sheet = workbook.DefaultWorkSheet; for (int col = 0; col < DataGridView1.Columns.Count; col++) { sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText); } for (int row = 0; row < DataGridView1.Rows.Count; row++) { if (DataGridView1.Rows[row].IsNewRow) continue; for (int col = 0; col < DataGridView1.Columns.Count; col++) { object? cell = DataGridView1.Rows[row].Cells[col].Value; if (cell is not null) sheet.SetCellValue(row + 1, col, cell.ToString()!); } } // Saving with a .csv extension produces a comma-separated file workbook.SaveAs("EmployeeData.csv"); } $vbLabelText $csharpLabel 與 XLSX 匯出相比,唯一的變更是傳遞給 SaveAs 的檔案副檔名。 IronXL會自動偵測檔案副檔名並將工作簿序列化為正確的格式。 這種一致性意味著無論輸出格式如何,您的資料寫入邏輯都保持不變——這比需要為每種格式編寫單獨程式碼路徑的程式庫具有顯著優勢。 當下游用戶是Python pandas 腳本、資料庫批次匯入工具或無法讀取二進位 XLSX 檔案的分析平台時,CSV 匯出功能尤其有用。 如何有效率地處理大型 DataGridView 資料集? 對於包含數萬行的網格,效能就成了需要考慮的問題。 以下模式透過一次建立完整資料集來降低記憶體壓力: IronXL導出方法比較(適用於大型資料集) 方法 已處理的行 辦公室要求 類型保存 Microsoft.Office.Interop.Excel 最高可達約 65k(慢速) 是的 部分的 IronXL (串狀細胞) 100萬行以上 不 否(所有文字) IronXL (類型化細胞) 100萬行以上 不 是的 來自 DataTable 的IronXL 100萬行以上 不 是的(自動) 當 DataGridView 綁定到 DataTable 時,您可以使用WorkSheet.LoadDataTable方法直接將表格載入到IronXL中,完全繞過逐個單元格的迭代。 這種方法速度更快,並且能夠自動保留所有列類型。 對於沒有 DataTable 支援的網格,前面所示的逐個單元格模式仍然是標準方法。 如果您需要非同步匯出以在大型匯出期間保持 UI 的響應性,請將導出邏輯包裝在 Task.Run 呼叫中,並在後台執行緒上 await 結果。 有關將結果編組回 UI 執行緒的模式,請參閱非同步文件操作文件。 為什麼IronXL比 Office Interop 更適合匯出 DataGridView 資料? 傳統的.NET解決方案使用 Microsoft.Office.Interop.Excel 來驅動正在執行的 Excel 流程。 這種方法會造成一些部署和可靠性問題: 每台執行該應用程式的電腦都需要安裝已授權的 Microsoft Excel 版本。 伺服器環境和雲端容器通常無法安裝 Office COM 互通性要求明確釋放每個對象,以避免記憶體洩漏和殭屍 Excel 進程。 COM邊界上的錯誤處理冗長且脆弱。 隨著行數的增加,效能迅速下降 IronXL直接寫入OOXML 檔案格式,無需啟動任何外部進程。 應用程式以獨立單元的形式部署。 該庫的 API 是完全託管的.NET,因此垃圾回收會自動處理內存,無需 Marshal.ReleaseComObject 呼叫。 由於無需進行進程間通信,速度大大提高。 對於正在評估各種方案的團隊來說, ClosedXML是一個受歡迎的開源選擇。 IronXL提供更廣泛的功能集,包括PDF 轉換、圖表生成和商業支持,這些可能是企業採購決策中的因素。 查看IronXL授權選項,選擇適合您團隊規模和部署方案的等級。 功能比較: IronXL與 Office Interop 特徵 IronXL Office Interop 需安裝辦公室軟體 不 是的 伺服器/雲端部署 是的 否(不支援) 託管記憶體模型 是的 否(需要清理 COM 檔案) XLSX / CSV / XLS 格式 這三個 取決於已安裝的 Excel 版本。 從電子表格匯出 PDF 是的 需要額外的庫 IronXL教學部分涵蓋了讀取現有 Excel 檔案、修改範本、生成圖表和應用條件格式——所有這些功能都是從這裡顯示的 DataGridView 匯出模式自然延伸出來的。 下一步計劃是什麼? 您現在擁有可運行的 C# 程式碼,可以使用IronXL將 DataGridView 匯出到格式化的 Excel 檔案。 接下來,請參考以下方向: -新增錯誤處理:將匯出程式碼包裹在 try/catch 程式碼區塊中,並在檔案被鎖定或路徑無效時顯示使用者友善的訊息。 -支援檔案路徑選擇:使用 SaveFileDialog 允許使用者在執行時選擇輸出位置和檔案名稱。 -載入真實資料:將範例程式碼 DataTable 替換為使用.NET或 Entity Framework 的資料庫查詢。 -讀取現有檔案:使用WorkBook.Load開啟現有電子表格並進行更新,而不是每次都建立新電子表格。 -匯出到多個工作表:在同一個工作表中建立額外的 WorkSheet 對象,以組織相關資料集 -套用條件格式:使用 IronXL 的條件格式 API突顯超過閾值的儲存格 -查看授權選項:提供免費試用; 許可證等級涵蓋從個人開發者到企業部署的各個層面。 -瀏覽完整的 API 參考文件: IronXL物件參考文件記錄了所有可用的類別和方法。 常見問題解答 在 C# 中,將 DataGridView 資料匯出至 Excel 的最簡單方法是什麼? 使用 IronXL,您可以在 C# 中透過一個簡短的迴圈,將 DataGridView 資料匯出至 Excel:該迴圈會將欄位標題和資料列寫入 WorkBook 物件,然後呼叫 SaveAs 來產生 XLSX 檔案。無需安裝 Microsoft Office。 如何在 C# Windows Forms 應用程式中使用 IronXL 處理 Excel 檔案? 透過 NuGet 安裝 IronXL,加入 using IronXL 指令,使用 WorkBook.Create() 建立工作簿,透過 SetCellValue 寫入資料,並使用 SaveAs 儲存。IronXL 支援 XLSX、XLS 及 CSV 格式。 IronXl.Excel 是否支援匯出大型 DataGridView 資料集至 Excel? 是的,IronXL 能高效處理大型資料集。對於以 DataTable 為後端的 DataGridView,您可以使用 LoadDataTable 方法,避免逐格迭代,從而獲得更佳的效能。 使用 IronXL 是否需要安裝 Microsoft Excel? 不。IronXL 會直接寫入 Open XML 檔案格式,無需啟動 Excel 或任何 COM 自動化。使用 IronXL 建置的應用程式會部署至無法使用 Office 的伺服器及雲端環境。 相較於 Office Interop,使用 IronXL 進行 Excel 匯出有哪些優勢? IronXL 無需安裝 Office,可避免 COM 記憶體洩漏問題,支援伺服器與雲端部署,並提供簡潔的受管 .NET API,用於讀寫 XLSX、XLS 和 CSV 檔案。 IronXL 能否將 DataGridView 資料匯出為 CSV 及 XLSX 格式? 是的。將 .csv 檔案路徑傳遞給 WorkBook.SaveAs 會產生逗號分隔的檔案。兩種格式的資料寫入程式碼完全相同——僅檔案副檔名有所不同。 如何使用 IronXL 為匯出的 Excel 儲存格套用格式? 使用 WorkSheet.GetRange 選取儲存格範圍,接著透過 Style 屬性設定 Font.Bold、SetBackgroundColor、Font.SetColor,以及用於數字格式的 FormatString。 如何在 C# 專案中開始使用 IronXL? 在您的專案中執行 `Install-Package IronXL` 或 `dotnet add package IronXL`,於檔案頂端加入 `using IronXL`,並參照 ironsoftware.com/csharp/excel/ 上的 IronXL 文件範例操作。 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工作簿。 閱讀更多 如何使用 IronXL 在 C# 中讀取 Excel 檔案如何使用 IronXL 在 C# 中快...
更新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工作簿。 閱讀更多