跳過到頁腳內容
使用 IRONXL

使用IronXL在C#中將DataGridView匯出到Excel。

使用IronXL將 DataGridView 資料匯出到 Excel(C#),消除對 Microsoft Office 的依賴,並提供容器友善的部署。 建立 WorkBook,遍歷 DataGridView 個儲存格,並以具有完整格式支援的 XLSX 格式儲存。

將 Windows Forms 中的資料匯出到 Excel 是商業應用程式中的常見需求。 無論是產生報告、創建資料備份,還是與利益相關者共享信息,開發人員都需要一種可靠的方法將 GridView 資料匯出為 Excel 格式。 使用 Microsoft Office Interop 的傳統方法已經達到了這個目的,但它們存在部署複雜性和依賴性要求,這可能會使應用程式分發變得複雜。

本教學示範了一個實用的 C# 範例,使用IronXL (一個.NET庫,無需安裝 Microsoft Office)將 DataGridView 資料匯出到 Excel。 您將探索如何實現一個乾淨、高效的匯出解決方案,該方案可在不同的環境中運行,包括雲端平台和容器。 無論是部署到 Azure 或在 Docker 容器中執行應用程序, IronXL都能提供 DevOps 團隊所需的部署彈性。

IronXL首頁展示了無需 Microsoft Office 或 Excel Interop 即可讀取 Excel 檔案的 C# 程式碼範例,並提供了語法高亮和NuGet下載統計資料。

為什麼匯出到 Excel 至關重要?

DataGridView 控制項是 Windows 窗體應用程式的基礎,用於顯示使用者每天與之互動的表格資料。 將此資料匯出到 Excel 後,使用者可以應用 Excel 強大的分析工具、建立演示文稿,並與可能無法存取應用程式的同事共用資料。 C# Excel匯出功能對於業務報表和資料分析工作流程至關重要。

使用Microsoft.Office.Interop.Excel的傳統匯出方法需要在執行該應用程式的每台電腦上安裝 Excel。 這會帶來部署方面的挑戰,尤其是在伺服器環境中或向沒有 Office 授權的使用者分發應用程式時。 此外,如果處理不當,互通方法可能會出現記憶體洩漏和 COM 物件清理問題。 當部署到 AWS Lambda 或其他無法安裝 Office 的無伺服器平台時,這些挑戰會變得特別嚴峻。

現代.NET應用程式需要更靈活的解決方案。 IronXL透過提供一個獨立的程式庫來應對這些挑戰,該程式庫可以產生不依賴任何 Microsoft Office 的 Excel 檔案。 這種方法確保了開發、測試和生產環境的功能一致性,同時支援部署到容器和雲端平台。

跨平台支援圖,展示了.NET在多個版本(9、8、7、6、Core、Standard、Framework)上的相容性,並包含Windows、Linux、Mac、Docker、Azure和AWS等各種平台的圖示。

IronXL和 Interop 有什麼不同?

下表總結了IronXL和 Microsoft Office Interop 在 Excel 匯出場景中的主要差異:

IronXL與 Microsoft Office Interop 在 Excel 匯出方面的比較
特徵 IronXL Microsoft Interop
需安裝辦公室軟體 是的
Linux/Docker 支援 是的
COM物件清理 無需 手動操作,容易出錯
記憶體洩漏風險 低的 如果不加以處置,後果不堪設想。
雲端/無伺服器部署 支援 不支援
匯出格式(XLSX、CSV、JSON、XML) 所有支持 有限的

如何在 C# 專案中安裝IronXL ?

在 Visual Studio 中開啟程式包管理器控制台並執行以下命令,或使用.NET CLI:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

終端輸出顯示在 C# 專案中成功安裝了IronXl.Excel NuGet套件及其依賴項

有關詳細的安裝選項,請參閱IronXL NuGet安裝指南或直接在NuGet上搜尋該軟體套件。 安裝完成後,將 using IronXL; 新增至您的 C# 專案檔案中,即可存取該程式庫的 Excel 匯出功能。 部署到生產環境時,請套用您的許可證金鑰以啟用所有功能。 您可以先獲得免費試用許可證,以便在購買前評估IronXL 。

基本的 DataGridView 匯出是什麼樣的?

以下程式碼建立了一個範例 Windows 窗體應用程序,其中包含填充的數據,然後使用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!");
$vbLabelText   $csharpLabel

此程式碼演示了核心導出功能。 DataTable 設定使用範例產品資料填入網格,作為 DataGridView 控制項的通用資料來源。 處理大型資料集時,可考慮使用 IronXL 的資料集匯入和匯出功能以提高效能。

匯出循環遍歷 DataGridView,使用 SetCellValue 和行和列索引將標題和資料放入 Excel 儲存格中。 IronXL文件涵蓋了針對更複雜場景的其他儲存格寫入選項。 IsNewRow 檢查會跳過可編輯的 DataGridViews 底部的空白行,從而確保 Excel 輸出乾淨,不會出現意外的空白行。

Windows Forms 應用程序,顯示一個 DataGridView,其中填充了產品數據,包括產品 ID、名稱、類別、價格和庫存列,下方有一個

Microsoft Excel 電子表格,顯示匯出的產品數據,包含產品 ID、產品名稱、類別、價格和庫存水平等列,涵蓋電子產品和電腦配件。

如果您在基於 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!");
$vbLabelText   $csharpLabel

此增強版可為匯出的 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!");
$vbLabelText   $csharpLabel

IronXL支援 Excel 公式,可讓您直接向匯出的檔案新增計算。 上面的範例新增了一個公式,用於自動計算列總計。 建立多個工作表有助於組織複雜的匯出內容,例如將詳細資料與匯總資訊分開。 請造訪IronXL 的操作指南,以了解如何建立 Excel 檔案以獲得更多工作表管理模式。

格式的靈活性對於整合場景尤其有價值。 雖然 XLSX 是 Excel 檔案的標準格式,但CSV 匯出提供了與資料庫系統和舊版應用程式的通用相容性。 JSON 和 XML 格式便於與 Web 服務和 API 進行資料交換。您也可以開啟現有工作簿,將匯出的資料追加到現有電子表格中,而無需每次都建立新檔案。

不同匯出格式有何不同?

Excel電子表格顯示了產品庫存,包含產品ID、名稱、類別、價格和庫存列,單元格D9中顯示了求和公式的結果1839.95。

Excel 電子表格顯示了一個名為

Excel電子表格顯示產品庫存數據,包含產品ID、產品名稱、類別、價格和庫存數量列,儲存格D9中顯示總和為1839.95。

JSON 文件,在程式碼編輯器介面中顯示產品數據,包含產品 ID、名稱、類別、價格和庫存欄位。

XML 檔案顯示了匯出的 DataGridView 數據,其中包含產品信息,包括 ID、名稱、類別、價格和庫存水平,並按 Sheet 元素進行組織。

IronXL如何簡化您的 C# 開發工作流程?

IronXL 的主要優點在於無需依賴 Microsoft Office。 無論部署在開發人員工作站、客戶機器或 Docker 容器中,您的應用程式都能穩定運作。 這種獨立性簡化了部署,並減少了與 Office 版本和安裝相關的支援問題。 微軟的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文件涵蓋了在分發之前必須保護匯出文件的安全選項。

Excel庫功能概覽,包含六大主要類別:建立、儲存和匯出、編輯工作簿、處理資料、保護工作簿、編輯版面選項。

生產用途有哪些授權選項?

IronXL在生產環境中部署需要有效的許可證金鑰。 您可以先申請免費試用許可證,解鎖所有功能進行評估。 請查看IronXL授權頁面,以了解從單一開發者授權到無限企業部署的各種授權等級的完整詳細資訊。

在使用IronXL 的任何功能之前,請先在您的應用程式中套用許可證金鑰:

IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
$vbLabelText   $csharpLabel

這一行程式碼會在應用程式進程的整個生命週期內啟動該程式庫。 對於 Web 應用程式和服務,請在啟動時設定許可證密鑰,以便所有請求都能享受到完整的功能集,而不會出現浮水印。

IronXL licensing options showing four tiers: Lite ($749), Plus ($999), Professional ($1,999), and Unlimited ($3,999) with varying developer, location, and project limits

為什麼您應該選擇IronXL來進行 C# 中的 Excel 匯出?

使用IronXL將 DataGridView 資料匯出到 Excel 變得非常簡單。 該程式庫消除了傳統的互通複雜性,同時提供了專業的格式化功能和多種匯出格式。 它採用容器友善架構,依賴項極少,並支援跨平台,使其成為現代 DevOps 工作流程的理想選擇。

IronXL主頁是探索完整庫的起點。 無論是建置微服務、部署到 Kubernetes 集群,還是運行無伺服器函數, IronXL都能無縫整合到 CI/CD 管道中。 匯出 Excel 操作指南提供了不同匯出場景的更多模式,而開啟工作簿指南則涵蓋了讀取和修改現有文件。

首先申請免費試用許可證,體驗全部功能。 IronXL教學和程式碼範例可協助您快速實現可用於生產環境的解決方案。 我們提供靈活的授權選項,滿足您的部署需求,從個人開發者授權到無限企業部署,應有盡有。 對於任何入門問題, IronXL文件中心提供 API 參考、程式碼範例和故障排除指南。

常見問題解答

使用IronXL將DataGridView匯出到Excel的好處是什麼?

IronXL通過消除Microsoft Office Interop的需求來簡化將DataGridView內容匯出到Excel的過程,減少了部署的複雜性並去除依賴要求。

IronXL如何改進應用程式分發?

IronXL通過不需要Microsoft Office Interop來減少應用程式分發的複雜性,因為Office Interop通常會附帶額外的依賴性,這會使部署變得複雜。

IronXL可以在VB.NET中匯出DataGridView數據嗎?

是的,IronXL提供了一個實用的解決方案,用於在VB.NET中將DataGridView數據匯出到Excel,使其更容易在商業應用中管理數據。

將DataGridView匯出到Excel的常見用例是什麼?

常見的用例包括生成報告,創建數據備份,並在商業環境中與利益相關者分享信息。

IronXL需要系統上安裝Microsoft Excel嗎?

不,IronXL不需要安裝Microsoft Excel,因為它獨立於Excel運行,簡化了部署過程。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我