如何使用 IronXL 在 C# 中將 DataGridView 匯出到 Excel
使用IronXL時,將資料從 DataGridView 匯出到 Excel 檔案只需要幾行 C# 程式碼。 建立一個 WorkBook,遍歷網格的列和行,將每個單元格的值寫入工作表,然後呼叫 SaveAs 產生一個完全格式化的 .xlsx 檔案 -- 無需安裝 Microsoft Office。
如何設定 Windows Forms 專案以進行 Excel 匯出?
Windows Forms 是 .NET 生態系統中基礎的 GUI 函式庫,廣泛用於建置桌面應用程式。 DataGridView 控制項是其最常用的元件之一:它可以顯示、編輯和管理來自任何可綁定來源(例如 DataTable、資料庫查詢結果或記憶體清單)的表格資料。
將該網格資料匯出至 Excel 可滿足多種日常需求——例如向利害關係人發送報告、為稽核目的存檔快照,或將資料饋送至下游分析工具。 傳統上主要有兩種方法:Microsoft Office Interop 以及第三方函式庫。 Interop 要求每台執行該應用程式的電腦都必須安裝 Excel,這會引發 COM 物件生命週期問題,且在伺服器或雲端部署環境中表現不佳。 IronXL、ClosedXML 和 Syncfusion 等函式庫透過直接寫入 Open XML 檔案格式,且不依賴任何 Office 元件,從而避免了這些問題。
本指南以 C# 語言示範 IronXL 針對 .NET 10 的應用方式,儘管 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
或者,在解決方案資源管理器中右鍵單擊項目,選擇"管理 NuGet 套件" ,搜尋 IronXL.Excel,然後按"安裝" 。

安裝完成後,請在使用 Excel 功能的任何檔案頂端加入 IronXL 的 using 指令:
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
IronXL 支援所有常見的試算表格式:XLSX、XLS、CSV 及 TSV。 本指南全程採用 XLSX 格式,因其為現代 Excel 版本的預設格式。
如何將範例資料填入 DataGridView?
在本演練中,表單包含一個名為 DataGridView 的 DataGridView1 和一個名為 btnExport 的按鈕。 表格在表單的 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;
}
Option Strict On
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dt As New DataTable()
' Define columns with the appropriate .NET type
dt.Columns.Add("EmployeeID", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Department", GetType(String))
dt.Columns.Add("Salary", GetType(Decimal))
' Add sample rows
dt.Rows.Add(101, "Sarah Johnson", "Engineering", 85000D)
dt.Rows.Add(102, "Michael Chen", "Marketing", 72000D)
dt.Rows.Add(103, "Emily Davis", "Finance", 91000D)
dt.Rows.Add(104, "James Wilson", "Engineering", 78000D)
DataGridView1.DataSource = dt
End Sub
每欄皆定義為特定的 .NET 類型,以確保後續的數值比較與格式化能正確運作。 DataSource 屬性將 DataTable 直接綁定至 DataGridView,表單開啟時,網格會自動呈現所有行。 在實際運作中,此類資料通常來自資料庫查詢、ORM 結果集或 REST API 回應,而非硬編碼的值。

理解 DataGridView 資料模型
DataGridView 透過兩個集合公開其內容:Columns(用於元數據,例如 HeaderText 和列索引)和 Rows(用於實際資料單元格)。 每個 DataGridViewRow 包含一個按列位置索引的 Cells 集合。 每個單元格的 Value 屬性返回一個裝箱對象,必須先將其強制轉換或轉換,然後才能將其寫入 Excel 單元格。 理解此層級結構對於撰寫可靠的匯出迴圈至關重要。
DataTable 在背景儲存輸入值,因此十進制工資在寫入 IronXL 工作表之前不需要字串轉換。 IronXL 的 SetCellValue 方法接受 string、double、decimal、int、SolutionName、int@@@--CODE-9-816@CO重載,允許您在輸出檔案中保留原始資料類型。
如何將 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");
}
Private Sub btnExport_Click(sender As Object, e As EventArgs)
Dim workbook = WorkBook.Create()
Dim sheet = workbook.DefaultWorkSheet
' Write column headers to row index 0
For col As Integer = 0 To DataGridView1.Columns.Count - 1
sheet.SetCellValue(0, col, DataGridView1.Columns(col).HeaderText)
Next
' Write data rows starting at row index 1
For row As Integer = 0 To DataGridView1.Rows.Count - 1
For col As Integer = 0 To DataGridView1.Columns.Count - 1
Dim cellValue As Object = DataGridView1.Rows(row).Cells(col).Value
If cellValue IsNot Nothing Then
sheet.SetCellValue(row + 1, col, cellValue.ToString())
End If
Next
Next
Dim outputPath As String = "EmployeeData.xlsx"
workbook.SaveAs(outputPath)
MessageBox.Show("Export complete. File saved to: " & outputPath, "Success")
End Sub
WorkBook 物件代表記憶體中的整個 Excel 檔案。 DefaultWorkSheet 傳回第一個工作表,而無需您明確建立工作表。 外層循環將 HeaderText 中的標題文字寫入第 0 行。 接著,嵌套迴圈會遍歷每一筆資料,在將儲存格值轉換為字串之前,先檢查該值是否為 null。 row + 1 偏移量將資料移到標題行下方。 SaveAs 將完成的工作簿以Open XML XLSX 檔案的形式寫入指定路徑。

生成的檔案可在 Excel、Google 試算表或任何支援 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");
}
Option Strict On
Sub ExportWithFormatting()
Dim workbook = WorkBook.Create()
Dim sheet = workbook.DefaultWorkSheet
' Write column headers
For col As Integer = 0 To DataGridView1.Columns.Count - 1
sheet.SetCellValue(0, col, DataGridView1.Columns(col).HeaderText)
Next
' Style the header row: bold white text on blue background
Dim headerRange = sheet.GetRange("A1:D1")
headerRange.Style.Font.Bold = True
headerRange.Style.SetBackgroundColor("#4472C4")
headerRange.Style.Font.SetColor("#FFFFFF")
' Locate the Salary column index
Dim salaryColIndex As Integer = -1
For i As Integer = 0 To DataGridView1.Columns.Count - 1
If String.Equals(DataGridView1.Columns(i).HeaderText, "Salary", StringComparison.OrdinalIgnoreCase) Then
salaryColIndex = i
Exit For
End If
Next
' Write data rows, preserving numeric types
For row As Integer = 0 To DataGridView1.Rows.Count - 1
If DataGridView1.Rows(row).IsNewRow Then Continue For
For col As Integer = 0 To DataGridView1.Columns.Count - 1
Dim cellValue As Object = DataGridView1.Rows(row).Cells(col).Value
If cellValue Is Nothing Then Continue For
Dim targetRow As Integer = row + 1
If col = salaryColIndex Then
' Write salary as a true numeric decimal
Dim decValue As Decimal
If Decimal.TryParse(cellValue.ToString(), Globalization.NumberStyles.Number, Globalization.CultureInfo.InvariantCulture, decValue) Then
sheet.SetCellValue(targetRow, col, decValue)
Else
sheet.SetCellValue(targetRow, col, cellValue.ToString())
End If
Else
sheet.SetCellValue(targetRow, col, cellValue.ToString())
End If
Next
Next
' Apply currency format to the salary column data range
Dim salaryRange = sheet.GetRange("D2:D5")
salaryRange.FormatString = "$#,##0"
workbook.SaveAs("FormattedEmployeeData.xlsx")
End Sub
GetRange 方法接受標準 Excel 表示法 (A1:D1) 來選擇連續的單元格區塊。 設定 Style.Font.Bold、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");
}
Sub ExportToCsv()
Dim workbook = WorkBook.Create()
Dim sheet = workbook.DefaultWorkSheet
For col As Integer = 0 To DataGridView1.Columns.Count - 1
sheet.SetCellValue(0, col, DataGridView1.Columns(col).HeaderText)
Next
For row As Integer = 0 To DataGridView1.Rows.Count - 1
If DataGridView1.Rows(row).IsNewRow Then Continue For
For col As Integer = 0 To DataGridView1.Columns.Count - 1
Dim cell As Object = DataGridView1.Rows(row).Cells(col).Value
If cell IsNot Nothing Then
sheet.SetCellValue(row + 1, col, cell.ToString())
End If
Next
Next
' Saving with a .csv extension produces a comma-separated file
workbook.SaveAs("EmployeeData.csv")
End Sub
與 XLSX 匯出相比,唯一的變更是傳遞給 SaveAs 的檔案副檔名。 IronXL 會自動偵測副檔名,並將工作簿序列化為正確的格式。 這種一致性意味著,無論輸出格式為何,您的資料寫入邏輯都保持不變——這相較於那些需要為每種格式分別編寫程式路徑的函式庫,是一項顯著優勢。
當下游使用者是 Python pandas 腳本、資料庫批量匯入工具,或是無法讀取二進位 XLSX 檔案的分析平台時,CSV 匯出功能特別實用。
如何高效處理大型 DataGridView 資料集?
對於包含數萬行的資料表,效能便成為需要考量的因素。 以下模式透過單次迭代建構完整資料集,從而減輕記憶體壓力:
| 方法 | 已處理的列 | 辦公室要求 | 保留原文格式 |
|---|---|---|---|
| Microsoft.Office.Interop.Excel | 最多 ~65k (慢速) | 是 | 部分 |
| IronXL (字串儲存格) | 100 萬多行 | 無 | 無 (所有文字) |
| IronXL(帶資料型的儲存格) | 100 萬多行 | 無 | 是 |
| IronXL 從 DataTable | 100 萬多行 | 無 | 是 (自動) |
當 DataGridView 綁定至 DataTable 時,您可以使用WorkSheet.LoadDataTable方法直接將表格載入到 IronXL 中,完全繞過逐個儲存格的迭代。 此方法速度更快,並能自動保留所有欄位類型。
對於沒有 DataTable 支援的網格,前面所示的逐個單元格模式仍然是標準方法。 如果您需要非同步導出以在大型導出期間保持 UI 的響應性,請將導出邏輯包裝在 Task.Run 呼叫中,並在後台執行緒上 await 結果。 請參閱非同步檔案操作文件,了解將結果傳回 UI 執行緒的模式。
為何 IronXL 在 DataGridView 匯出功能上優於 Office Interop?
傳統的 .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 |
|---|---|---|
| 需安裝辦公室軟體 | 無 | 是 |
| 伺服器/雲端部署 | 是 | 否(不支援) |
| 受管記憶體模型 | 是 | 不需要(需進行 COM 清理) |
| XLSX / CSV / XLS 格式 | 這三項 | 取決於已安裝的 Excel |
| 從試算表匯出 PDF | 是 | 需要額外的函式庫 |
IronXL 的教學單元涵蓋讀取現有 Excel 檔案、修改範本、生成圖表以及套用條件格式化——這些功能皆自然延伸自此處展示的 DataGridView 匯出模式。
下一步計劃是什麼?
現在您擁有可以使用 IronXL 將 DataGridView 匯出到格式化 Excel 檔案的工作 C# 程式碼。 在此基礎上,請參考以下要點:
-新增錯誤處理:將匯出程式碼包裹在 try/catch 程式碼區塊中,並在檔案被鎖定或路徑無效時顯示使用者友善的訊息。
-支援檔案路徑選擇:使用 SaveFileDialog 允許使用者在執行時選擇輸出位置和檔案名稱。
-載入真實資料:將範例程式碼 DataTable 替換為使用ADO.NET或 Entity Framework 的資料庫查詢。
- 讀取現有檔案:使用 WorkBook.Load 開啟現有的試算表並進行更新,而非總是建立新的試算表
-匯出到多個工作表:在同一個工作表中建立額外的
WorkSheet對象,以組織相關資料集 - 套用條件格式:使用 IronXL 的條件格式 API 標示超過閾值的儲存格
- 檢視授權選項:提供免費試用授權; 授權層級涵蓋從個人開發者到Enterprise部署
- 瀏覽完整的 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 文件範例操作。


