using IronXL 將 C# 中的 DataGridView 匯出到 Excel
使用IronXL在C#中將DataGridView資料導出到Excel,無需依賴Microsoft Office,且提供容器友好的部署。 建立一個DataGridView單元格,並保存為XLSX格式,支持完整的格式化。
從Windows Forms DataGridView導出資料到Excel是商業應用中的常見需求。 無論是生成報告、建立資料備份,還是與利益相關者共享資訊,開發人員需要一個可靠的方式將GridView資料導出為Excel格式。 使用Microsoft Office Interop的傳統方法已經支持了這一需求,但它們伴隨著部署的複雜性和依賴要求,這可能會使應用程式的分發變得複雜。
本教程演示了使用IronXL在C#中導出DataGridView資料到Excel的實際範例,一個不需要安裝Microsoft Office的.NET程式庫。 您將探索如何實現一個乾淨且高效的導出解決方案,適用於不同的環境,包括雲平台和容器。 無論是部署到Azure還是運行在Docker容器中,IronXL都提供了DevOps團隊所需的部署靈活性。

為什麼將DataGridView導出到Excel很重要?
DataGridView控制對Windows Forms應用程式至關重要,顯示使用者每天交互的表格資料。 將此資料導出到Excel能讓使用者利用Excel強大的分析工具,建立演示,以及與可能無法存取應用程式的同事共享資料。 此C# Excel導出功能對於商業報告和資料分析工作流程至關重要。
使用Microsoft.Office.Interop.Excel的傳統導出方法需要在每台運行應用程式的計算機上安裝Excel。 這給部署帶來了挑戰,特別是在伺服器環境中或將應用程式分發給沒有Office授權的使用者時。 此外,如果不小心處理,Interop方法可能會出現記憶體洩漏和COM物件清理問題。 這些挑戰在部署到AWS Lambda或其他不宜安裝Office的無伺服器平台時尤為嚴重。
現代.NET應用程式需要更靈活的解決方案。 IronXL通過提供一個獨立的程式庫來應對這些挑戰,能夠生成Excel文件而不依賴於Microsoft Office。 這種方法確保了開發、測試和生產環境中的一致性功能,同時支持部署到容器和雲平台。

IronXL和Interop如何比較?
下表總結了IronXL和Microsoft Office Interop在Excel導出場景中的主要區別:
| 功能 | IronXL | Microsoft互操作 |
|---|---|---|
| 需要安裝Office | 否 | 是 |
| Linux / Docker支持 | 是 | 否 |
| COM物件清理 | 不需要 | 手動,容易出錯 |
| 記憶體洩漏風險 | 低 | 如果不釋放,風險高 |
| 雲 / 無伺服器部署 | 支持 | 不支持 |
| 導出格式(XLSX, CSV, JSON, XML) | 全部支持 | 有限 |
您如何在C#項目中安裝IronXL?
在Visual Studio中打開套件管理器控制台,運行以下命令,或使用.NET CLI:
Install-Package IronXL.Excel

有關詳細的安裝選項,請參閱IronXL NuGet安裝指南或直接在NuGet.org上搜索該包。 一旦安裝完成,將using IronXL;新增到您的C#項目文件中,以存取該程式庫的Excel導出功能。 在部署到生產環境時,應用您的授權密鑰以啟用所有功能。 您可以獲得免費試用授權來評估IronXL再決定購買。
一個基本的DataGridView導出看起來如何?
下面的程式碼建立了一個示範Windows Forms應用程式,其中有一個DataGridView填充了資料,然後使用IronXL高級語句將其導出到Excel:
using IronXL;
using System.Data;
using System.Windows.Forms;
// Create a DataTable with sample product data
var dt = new DataTable();
dt.Columns.Add("Product ID", typeof(int));
dt.Columns.Add("Product Name", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Columns.Add("Stock", typeof(int));
dt.Rows.Add(1001, "Laptop Pro", "Electronics", 1299.99m, 15);
dt.Rows.Add(1002, "Wireless Mouse", "Accessories", 29.99m, 50);
dt.Rows.Add(1003, "USB-C Cable", "Accessories", 19.99m, 100);
dt.Rows.Add(1004, "Monitor 27\"", "Electronics", 399.99m, 8);
dt.Rows.Add(1005, "Keyboard Mechanical", "Accessories", 89.99m, 25);
// Bind to DataGridView
var dataGridView1 = new DataGridView();
dataGridView1.DataSource = dt;
// Create new Excel workbook
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.DefaultWorkSheet;
// Export column headers
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
worksheet.SetCellValue(0, colIndex, dataGridView1.Columns[colIndex].HeaderText);
}
// Export data rows
for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count; rowIndex++)
{
if (!dataGridView1.Rows[rowIndex].IsNewRow)
{
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
var cellValue = dataGridView1.Rows[rowIndex].Cells[colIndex].Value;
if (cellValue is decimal or double or int)
worksheet.SetCellValue(rowIndex + 1, colIndex, Convert.ToDouble(cellValue));
else
worksheet.SetCellValue(rowIndex + 1, colIndex, cellValue?.ToString() ?? string.Empty);
}
}
}
// Save the Excel file
workbook.SaveAs("DataGridViewExport.xlsx");
Console.WriteLine("Export completed successfully!");
using IronXL;
using System.Data;
using System.Windows.Forms;
// Create a DataTable with sample product data
var dt = new DataTable();
dt.Columns.Add("Product ID", typeof(int));
dt.Columns.Add("Product Name", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Columns.Add("Stock", typeof(int));
dt.Rows.Add(1001, "Laptop Pro", "Electronics", 1299.99m, 15);
dt.Rows.Add(1002, "Wireless Mouse", "Accessories", 29.99m, 50);
dt.Rows.Add(1003, "USB-C Cable", "Accessories", 19.99m, 100);
dt.Rows.Add(1004, "Monitor 27\"", "Electronics", 399.99m, 8);
dt.Rows.Add(1005, "Keyboard Mechanical", "Accessories", 89.99m, 25);
// Bind to DataGridView
var dataGridView1 = new DataGridView();
dataGridView1.DataSource = dt;
// Create new Excel workbook
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.DefaultWorkSheet;
// Export column headers
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
worksheet.SetCellValue(0, colIndex, dataGridView1.Columns[colIndex].HeaderText);
}
// Export data rows
for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count; rowIndex++)
{
if (!dataGridView1.Rows[rowIndex].IsNewRow)
{
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
var cellValue = dataGridView1.Rows[rowIndex].Cells[colIndex].Value;
if (cellValue is decimal or double or int)
worksheet.SetCellValue(rowIndex + 1, colIndex, Convert.ToDouble(cellValue));
else
worksheet.SetCellValue(rowIndex + 1, colIndex, cellValue?.ToString() ?? string.Empty);
}
}
}
// Save the Excel file
workbook.SaveAs("DataGridViewExport.xlsx");
Console.WriteLine("Export completed successfully!");
Imports IronXL
Imports System.Data
Imports System.Windows.Forms
' Create a DataTable with sample product data
Dim dt As New DataTable()
dt.Columns.Add("Product ID", GetType(Integer))
dt.Columns.Add("Product Name", GetType(String))
dt.Columns.Add("Category", GetType(String))
dt.Columns.Add("Price", GetType(Decimal))
dt.Columns.Add("Stock", GetType(Integer))
dt.Rows.Add(1001, "Laptop Pro", "Electronics", 1299.99D, 15)
dt.Rows.Add(1002, "Wireless Mouse", "Accessories", 29.99D, 50)
dt.Rows.Add(1003, "USB-C Cable", "Accessories", 19.99D, 100)
dt.Rows.Add(1004, "Monitor 27""", "Electronics", 399.99D, 8)
dt.Rows.Add(1005, "Keyboard Mechanical", "Accessories", 89.99D, 25)
' Bind to DataGridView
Dim dataGridView1 As New DataGridView()
dataGridView1.DataSource = dt
' Create new Excel workbook
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Export column headers
For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
worksheet.SetCellValue(0, colIndex, dataGridView1.Columns(colIndex).HeaderText)
Next
' Export data rows
For rowIndex As Integer = 0 To dataGridView1.Rows.Count - 1
If Not dataGridView1.Rows(rowIndex).IsNewRow Then
For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
Dim cellValue = dataGridView1.Rows(rowIndex).Cells(colIndex).Value
If TypeOf cellValue Is Decimal OrElse TypeOf cellValue Is Double OrElse TypeOf cellValue Is Integer Then
worksheet.SetCellValue(rowIndex + 1, colIndex, Convert.ToDouble(cellValue))
Else
worksheet.SetCellValue(rowIndex + 1, colIndex, If(cellValue?.ToString(), String.Empty))
End If
Next
End If
Next
' Save the Excel file
workbook.SaveAs("DataGridViewExport.xlsx")
Console.WriteLine("Export completed successfully!")
此程式碼演示了核心的導出功能。 DataGridView控件資料源。 當處理較大資料集時,考慮使用IronXL的DataSet導入和導出功能來提高性能。
導出迴圈遍歷DataGridView,使用行和列索引將標題和資料放入Excel單元格中。 IronXL文件涵蓋了更複雜場景的其他單元格寫入選項。 DataGridViews底部的空行,確保Excel輸出中沒有意外的空白行。


如果您在基於Web的ASP.NET MVC應用程式中實現此功能,將文件作為可下載響應返回,使用Content-Disposition HTTP標頭。 對於ASP.NET WebForms開發人員,您可能需要在導出控件時覆蓋VerifyRenderingInServerForm以確保正確的渲染。 請存取IronXL功能頁面以獲得支持場景完整列表。
您如何在Excel導出中新增專業格式?
專業的Excel導出通常需要格式化以提高可讀性。 IronXL提供包括字體自定義、背景顏色、邊框和對齊的樣式功能。 下面的範例新增了標題格式和交替行顏色:
using IronXL;
using System.Data;
using System.Windows.Forms;
// Assume dataGridView1 is already populated with data
var dataGridView1 = new DataGridView();
// (populate dataGridView1 with data as shown in the previous example)
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.DefaultWorkSheet;
// Set column headers with formatting
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
var headerCell = worksheet.GetCellAt(0, colIndex);
headerCell.Value = dataGridView1.Columns[colIndex].HeaderText;
headerCell.Style.Font.Bold = true;
headerCell.Style.BackgroundColor = "#4472C4";
headerCell.Style.Font.Color = "#FFFFFF";
headerCell.Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center;
}
// Export data with alternating row colors
for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count; rowIndex++)
{
if (!dataGridView1.Rows[rowIndex].IsNewRow)
{
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
var cellValue = dataGridView1.Rows[rowIndex].Cells[colIndex].Value;
var excelCell = worksheet.GetCellAt(rowIndex + 1, colIndex);
if (cellValue != null)
excelCell.Value = cellValue.ToString();
// Apply alternating row background
if (rowIndex % 2 == 0)
excelCell.Style.BackgroundColor = "#F2F2F2";
}
}
}
// Auto-fit columns
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
worksheet.AutoSizeColumn(colIndex);
}
workbook.SaveAs("FormattedExport.xlsx");
Console.WriteLine("Formatted export completed successfully!");
using IronXL;
using System.Data;
using System.Windows.Forms;
// Assume dataGridView1 is already populated with data
var dataGridView1 = new DataGridView();
// (populate dataGridView1 with data as shown in the previous example)
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.DefaultWorkSheet;
// Set column headers with formatting
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
var headerCell = worksheet.GetCellAt(0, colIndex);
headerCell.Value = dataGridView1.Columns[colIndex].HeaderText;
headerCell.Style.Font.Bold = true;
headerCell.Style.BackgroundColor = "#4472C4";
headerCell.Style.Font.Color = "#FFFFFF";
headerCell.Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center;
}
// Export data with alternating row colors
for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count; rowIndex++)
{
if (!dataGridView1.Rows[rowIndex].IsNewRow)
{
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
var cellValue = dataGridView1.Rows[rowIndex].Cells[colIndex].Value;
var excelCell = worksheet.GetCellAt(rowIndex + 1, colIndex);
if (cellValue != null)
excelCell.Value = cellValue.ToString();
// Apply alternating row background
if (rowIndex % 2 == 0)
excelCell.Style.BackgroundColor = "#F2F2F2";
}
}
}
// Auto-fit columns
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++)
{
worksheet.AutoSizeColumn(colIndex);
}
workbook.SaveAs("FormattedExport.xlsx");
Console.WriteLine("Formatted export completed successfully!");
Imports IronXL
Imports System.Data
Imports System.Windows.Forms
' Assume dataGridView1 is already populated with data
Dim dataGridView1 As New DataGridView()
' (populate dataGridView1 with data as shown in the previous example)
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet = workbook.DefaultWorkSheet
' Set column headers with formatting
For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
Dim headerCell = worksheet.GetCellAt(0, colIndex)
headerCell.Value = dataGridView1.Columns(colIndex).HeaderText
headerCell.Style.Font.Bold = True
headerCell.Style.BackgroundColor = "#4472C4"
headerCell.Style.Font.Color = "#FFFFFF"
headerCell.Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center
Next
' Export data with alternating row colors
For rowIndex As Integer = 0 To dataGridView1.Rows.Count - 1
If Not dataGridView1.Rows(rowIndex).IsNewRow Then
For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
Dim cellValue = dataGridView1.Rows(rowIndex).Cells(colIndex).Value
Dim excelCell = worksheet.GetCellAt(rowIndex + 1, colIndex)
If cellValue IsNot Nothing Then
excelCell.Value = cellValue.ToString()
End If
' Apply alternating row background
If rowIndex Mod 2 = 0 Then
excelCell.Style.BackgroundColor = "#F2F2F2"
End If
Next
End If
Next
' Auto-fit columns
For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
worksheet.AutoSizeColumn(colIndex)
Next
workbook.SaveAs("FormattedExport.xlsx")
Console.WriteLine("Formatted export completed successfully!")
這個增強版本將專業格式應用到導出的Excel文件中。標題使用藍色背景和白色字體顏色加粗文字,從視覺上明顯區分於資料行。 程式碼使用模數運算實現交替行顏色,提高了大資料集的可讀性。 您可以進一步使用IronXL單元格式指南自定義外觀或應用合併單元格功能來跨列標題。
AutoSizeColumn方法調整列寬以適應內容,消除了導出後的手動調整。 這些格式選項將基本資料導出轉化為可隨時共享的演示文件。 檢查如何使用IronXL 編寫Excel文件以獲得更多格式和資料編寫模式。
您如何導出到多種格式並新增公式?
IronXL不僅僅是基本的Excel導出,還提供公式支持、多工作表和其他輸出格式。 下面的範例展示了這些功能:
using IronXL;
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.DefaultWorkSheet;
// (populate worksheet with DataGridView data as shown above)
int dataRowCount = 5; // Replace with actual dataGridView1.Rows.Count
// Add a SUM formula to calculate the total price column
worksheet.SetCellValue(dataRowCount + 2, 3, $"=SUM(D2:D{dataRowCount + 1})");
// Create a summary worksheet
var summarySheet = workbook.CreateWorkSheet("Summary");
summarySheet.SetCellValue(0, 0, "Total Products");
summarySheet.SetCellValue(0, 1, dataRowCount);
// Save in multiple formats
workbook.SaveAs("export.xlsx");
workbook.SaveAsCsv("export.csv");
workbook.SaveAsJson("export.json");
workbook.SaveAsXml("export.xml");
Console.WriteLine("Multi-format export completed!");
using IronXL;
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.DefaultWorkSheet;
// (populate worksheet with DataGridView data as shown above)
int dataRowCount = 5; // Replace with actual dataGridView1.Rows.Count
// Add a SUM formula to calculate the total price column
worksheet.SetCellValue(dataRowCount + 2, 3, $"=SUM(D2:D{dataRowCount + 1})");
// Create a summary worksheet
var summarySheet = workbook.CreateWorkSheet("Summary");
summarySheet.SetCellValue(0, 0, "Total Products");
summarySheet.SetCellValue(0, 1, dataRowCount);
// Save in multiple formats
workbook.SaveAs("export.xlsx");
workbook.SaveAsCsv("export.csv");
workbook.SaveAsJson("export.json");
workbook.SaveAsXml("export.xml");
Console.WriteLine("Multi-format export completed!");
Imports IronXL
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet = workbook.DefaultWorkSheet
' (populate worksheet with DataGridView data as shown above)
Dim dataRowCount As Integer = 5 ' Replace with actual dataGridView1.Rows.Count
' Add a SUM formula to calculate the total price column
worksheet.SetCellValue(dataRowCount + 2, 3, $"=SUM(D2:D{dataRowCount + 1})")
' Create a summary worksheet
Dim summarySheet = workbook.CreateWorkSheet("Summary")
summarySheet.SetCellValue(0, 0, "Total Products")
summarySheet.SetCellValue(0, 1, dataRowCount)
' Save in multiple formats
workbook.SaveAs("export.xlsx")
workbook.SaveAsCsv("export.csv")
workbook.SaveAsJson("export.json")
workbook.SaveAsXml("export.xml")
Console.WriteLine("Multi-format export completed!")
IronXL支持Excel公式,允許您直接向導出的文件中新增計算。 上面的範例新增了一個SUM公式,自動計算列總和。 建立多個工作表有助於組織複雜的導出,例如將詳細資料與摘要資訊分開。 存取IronXL如何建立Excel文件指南以獲得更多工作表管理模式。
格式靈活性在整合場景中特別有價值。 雖然XLSX是Excel文件的標準,CSV導出提供了與資料庫系統和舊應用程式的通用相容性。 JSON和XML格式促進了與Web服務和API的資料交換。您還可以打開現有工作簿以將導出的資料附加到現有電子表格中,而不是每次建立新文件。
不同的導出格式如何比較?





IronXL如何簡化您的C#開發工作流程?
IronXL的主要優勢是消除了對Microsoft Office的依賴。 您的應用程式無論是在開發者工作站、客戶機還是Docker容器中部署都能一致運行。 這種獨立性簡化了部署並減少了與Office版本和安裝相關的支持問題。 來自Microsoft的Open XML SDK是另一種無Office替代方案,雖然與IronXL的高級API相比,需要顯著更多的樣板程式碼。 有關跨平台.NET 10開發指導,Microsoft .NET文件涵蓋了平台目標、部署模型和Windows Forms特性。
程式庫的API設計優先考慮簡單性。 與需要小心物件處理的Interop基於COM的方法不同,IronXL使用標準的.NET模式,使C#開發人員感到自然。 跨平台支持意味著為Windows Forms構建的導出功能可以在Linux伺服器上運行的ASP.NET Core應用程式中重用。 有關可用功能的完整概述,請存取IronXL功能頁面。
您還可以從Excel導入資料以預填充DataGridView,然後導出,創造出使用者載入Excel資料、在網格中編輯並將結果導出回Excel的往返工作流程。 讀取Excel文件指南詳細介紹了導入方面。
當處理敏感資料時,IronXL支持工作簿級別和工作表級別的密碼保護。 IronXL文件涵蓋了必須在分發之前保護的導出文件的安全選項。

生產使用的授權選項是什麼?
IronXL要求有效的授權密鑰才能進行生產部署。 您可以從免費試用授權開始,它解鎖了所有功能供評估。 查看IronXL授權頁面以獲取有關從單開發者授權到無限企業部署的完整細節。
在使用任何IronXL功能之前,在應用程式中應用授權密鑰:
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
Imports IronXL
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
這一行激活整個應用程式過程的程式庫。 對於Web應用程式和服務,請在啟動期間設置授權密鑰,使所有請求受益於完整功能集,而無需水印。

為什麼您應該選擇IronXL進行Excel導出到C#?
使用IronXL將DataGridView資料導出到Excel變得簡單。 該程式庫消除了傳統Interop的復雜性,並提供專業格式功能和多種導出格式。 其容器友好的架構、最少的依賴性和跨平台支持使其非常適合現代DevOps工作流程。
IronXL首頁是探索完整程式庫的起點。 無論是構建微服務,還是部署到Kubernetes集群或運行無伺服器功能,IronXL都可以乾淨地整合到CI/CD管道中。 導出Excel指南提供了不同導出場景的附加模式,打開工作簿指南涵蓋了讀取和修改現有文件。
從免費試用授權開始探索完整功能集。 IronXL教程和程式碼範例幫助您快速實施生產就緒的解決方案。 從適合您部署需求的靈活授權選項中選擇,從單個開發者授權到無限企業部署。 若有任何有關入門的問題,IronXL文件中心提供API參考、程式碼範例和疑難排解指南。
常見問題
使用IronXL將DataGridView匯出到Excel的好處是什麼?
IronXL透過消除對微軟Office Interop的需求,簡化了將DataGridView內容匯出到Excel的過程,降低了部署的複雜性,消除了依賴性要求。
IronXL如何改善應用程式分發?
IronXL通過不需要微軟Office Interop來降低應用程式分發的複雜性,因為它通常帶有可能使部署複雜化的附加依賴項。
IronXL能否在VB.NET中匯出DataGridView資料?
是的,IronXL提供了一個實用的解決方案,用於將DataGridView資料匯出到Excel,使其在商業應用程式中更容易管理資料。
將DataGridView匯出到Excel的常見使用情況是什麼?
常見的使用情況包括生成報告、建立資料備份,以及在商業背景中與利益相關者分享資訊。
IronXL需要在系統上安裝微軟Excel嗎?
不需要,IronXL不需要微軟Excel安裝,因為它獨立於Excel運作,簡化了部署過程。




