跳過到頁腳內容
使用 IRONXL

如何在 C# 中將 DataGridView 匯出為 Excel 並保留列標題

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

將 Windows Forms DataGridView 控制項中的資料匯出為 Excel 格式是常見的需求,但開發人員經常會遇到一個關鍵問題:匯出的文件中缺少列標題。當您需要將 DataGridView 資料匯出到 Excel 並保留列標題時,您需要一個能夠完美保留所有資料和格式的解決方案。 雖然使用 Microsoft Office Interop 的傳統方法速度較慢且需要安裝 MS Excel,但IronXL提供了一個簡化的解決方案,可以無縫地處理資料網格視圖到 Excel 的轉換。

在這篇文章中,我們將向您展示如何使用 IronXL(一個功能強大的.NET Excel 庫,無需 Microsoft Office 依賴即可運行)將 DataGridView 資料匯出到 Excel,並保留所有資料和列標題。 您將學習如何用幾行程式碼實作一個完整的匯出解決方案,該方案可以處理標頭、資料類型和使用者友好的文件保存。

我們也會提及一些常見的陷阱,示範物件 obj 的使用範例,並提供一些評論和註釋,以便您可以進一步擴展範例。

IronXL為何是理想之選?

IronXL 透過提供無需安裝 Microsoft Excel 的直覺式 API,簡化了 .NET 應用程式中的 Excel 操作。 與基於互通性的解決方案不同,IronXL 可以獨立運行,因此非常適合伺服器環境和沒有 Office 的機器。

此程式庫可處理所有Excel 格式,包括 XLSX、XLS 和 CSV,並在整個匯出過程中保持資料完整性和格式。 開發人員無需安裝 Excel 即可輕鬆複製資料、擴充工作表以及刪除或新增行。

設定 Windows 窗體項目

首先,在 Visual Studio 中建立一個新的 Windows 窗體應用程式。 專案準備就緒後,透過 NuGet 套件管理器安裝 IronXL。 開啟軟體包管理器控制台並執行:

Install-Package IronXL.Excel

安裝完成後,請將以下必要的命名空間新增至您的表單:

using IronXL;
using System;
using System.Data;
using System.Windows.Forms;
using IronXL;
using System;
using System.Data;
using System.Windows.Forms;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這些導入功能提供了對IronXL 的 Excel 功能、資料表操作和 Windows 窗體控制項的訪問,這些功能是匯出過程所必需的。

使用範例資料建立 DataGridView

讓我們建立一個簡單的介面,其中包含一個填充了範例資料來源的 DataGridView。 您可能還需要從 CSV 檔案或資料庫匯入數據,而下面的 DataTable 方法同樣適用於匯入的資料集。 透過 Visual Studio 設計器為表單新增一個新的 DataGridView 和一個按鈕,然後使用下列程式碼設定資料:

private void Form1_Load(object sender, EventArgs e)
{
    // Example object usage
    object obj = "Initializing DataTable"; 
    Console.WriteLine(obj);
    // Create a DataTable with sample data
    DataTable dt = new DataTable();
    // Add columns with descriptive headers
    dt.Columns.Add("Product ID", typeof(int));
    dt.Columns.Add("Product Name", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock Quantity", typeof(int));
    // Add sample rows
    dt.Rows.Add(1001, "Laptop", 999.99m, 15);
    dt.Rows.Add(1002, "Mouse", 29.99m, 50);
    dt.Rows.Add(1003, "Keyboard", 79.99m, 30);
    dt.Rows.Add(1004, "Monitor", 299.99m, 12);
    dt.Rows.Add(1005, "Headphones", 89.99m, 25);  
    // Bind the DataTable to DataGridView Control
    dataGridView1.DataSource = dt;
}
private void Form1_Load(object sender, EventArgs e)
{
    // Example object usage
    object obj = "Initializing DataTable"; 
    Console.WriteLine(obj);
    // Create a DataTable with sample data
    DataTable dt = new DataTable();
    // Add columns with descriptive headers
    dt.Columns.Add("Product ID", typeof(int));
    dt.Columns.Add("Product Name", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock Quantity", typeof(int));
    // Add sample rows
    dt.Rows.Add(1001, "Laptop", 999.99m, 15);
    dt.Rows.Add(1002, "Mouse", 29.99m, 50);
    dt.Rows.Add(1003, "Keyboard", 79.99m, 30);
    dt.Rows.Add(1004, "Monitor", 299.99m, 12);
    dt.Rows.Add(1005, "Headphones", 89.99m, 25);  
    // Bind the DataTable to DataGridView Control
    dataGridView1.DataSource = dt;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此範例建立一個資料表並將其綁定到網格。 即使數據量較小,該方法也能很好地擴展到更大的表格。 這裡定義的列名將成為 Excel 檔案中的標題。

範例資料代表了一個簡單的產品庫存,以便於驗證導出是否正確。 對於更複雜的資料綁定場景,微軟關於DataGridView 資料綁定的文件提供了更多範例。

這將創建一個 DataGridView,其中填充了我們程式碼中的所有資料:

如何在 C# 中將帶有列標題的 DataGridView 匯出到 Excel:圖 1 - DataGridView 中的範例數據

實作帶有列標題的匯出

現在來說說主要功能,即在保留列標題的情況下將 DataGridView 匯出到 Excel。 新增此方法來處理匯出按鈕的點擊事件:

private void btnExport_Click(object sender, EventArgs e)
{
    // Create a new Excel workbook
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Exported Data");
    // Export column headers
    for (int col = 0; col < dataGridView1.Columns.Count; col++)
    {
        worksheet.SetCellValue(0, col, dataGridView1.Columns[col].HeaderText);
    }
    // Export data rows
    for (int row = 0; row < dataGridView1.Rows.Count; row++)
    {
        // Skip the last empty row (used for adding new rows in DataGridView)
        if (dataGridView1.AllowUserToAddRows && row == dataGridView1.Rows.Count - 1)
            continue;
        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            var cellValue = dataGridView1.Rows[row].Cells[col].Value;
            if (cellValue != null)
            {
                worksheet.SetCellValue(row + 1, col, cellValue.ToString());
            }
        }
    }
    // Show save dialog
    using (SaveFileDialog saveFileDialog = new SaveFileDialog
    {
        Filter = "Excel Files|*.xlsx",
        FileName = "DataGridView_Export.xlsx"
    })
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(saveFileDialog.FileName);
            MessageBox.Show("Export completed successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
private void btnExport_Click(object sender, EventArgs e)
{
    // Create a new Excel workbook
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Exported Data");
    // Export column headers
    for (int col = 0; col < dataGridView1.Columns.Count; col++)
    {
        worksheet.SetCellValue(0, col, dataGridView1.Columns[col].HeaderText);
    }
    // Export data rows
    for (int row = 0; row < dataGridView1.Rows.Count; row++)
    {
        // Skip the last empty row (used for adding new rows in DataGridView)
        if (dataGridView1.AllowUserToAddRows && row == dataGridView1.Rows.Count - 1)
            continue;
        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            var cellValue = dataGridView1.Rows[row].Cells[col].Value;
            if (cellValue != null)
            {
                worksheet.SetCellValue(row + 1, col, cellValue.ToString());
            }
        }
    }
    // Show save dialog
    using (SaveFileDialog saveFileDialog = new SaveFileDialog
    {
        Filter = "Excel Files|*.xlsx",
        FileName = "DataGridView_Export.xlsx"
    })
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(saveFileDialog.FileName);
            MessageBox.Show("Export completed successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此導出方法包含以下幾個關鍵步驟:

1.建立工作簿WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX) 在記憶體中初始化一個新的 Excel 檔案。 2.新增工作表:CreateWorkSheet 方法會新增一個命名的工作表來儲存您的資料。 3.匯出表頭:第一個循環遍歷 DataGridView 列,提取 HeaderText 屬性並將其寫入第 0 行。 4.匯出資料:巢狀循環處理每個表格單元格,並進行空值檢查以防止錯誤。 5.使用者友善的儲存功能:SaveFileDialog 允許使用者選擇檔案位置和名稱

保留標題的關鍵在於存取 dataGridView1.Columns[i].HeaderText 屬性,該屬性包含每個列標題的顯示文字。 您可以在每個匯出步驟上方新增註釋,以便其他開發人員或未來維護人員了解其用途。

如何在 C# 中將 DataGridView 匯出到 Excel 並帶有列標題:圖 2 - 包含匯出範例資料的輸出 Excel 文件

處理常見的Excel檔案資料匯出場景

在處理真實世界資料時,您會遇到各種需要分析的場景。

特殊處理:

*空白儲存格*:我們的程式碼中的空值檢查可以防止儲存格不包含資料時發生錯誤。 在 Excel 中,空白儲存格顯示為空白,保持網格結構不變。 混合資料類型**:IronXL 會自動處理不同的資料格式。 在 Excel 中,數字保持數值形式,可以進行計算,而文字則保持字串形式。 *特殊字元:包含特殊字元的列標題可以正確匯出。 IronXL 會自動處理編碼,保留 &、<、> 等字元以及帶有重音符號的字母。

匯出文件時可能會出現錯誤。 使用 try-catch-finally 語句進行健全處理:

try 
{
    // Export code here
}
catch (Exception ex)
{
    MessageBox.Show($"Export failed: {ex.Message}", "Error", 
                   MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try 
{
    // Export code here
}
catch (Exception ex)
{
    MessageBox.Show($"Export failed: {ex.Message}", "Error", 
                   MessageBoxButtons.OK, MessageBoxIcon.Error);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronXL 會保留 Excel 表格的詳細信息,例如格式、標題和特殊字元。 對於更進階的場景,您可以查閱 IronXL 文件作為參考,以了解檔案安全性、儲存格樣式公式保留等任務。

結論

使用 IronXL 將 DataGridView 匯出到 Excel 並帶有列標題非常簡單。 該庫負責處理複雜的 Excel 文件操作,讓您可以專注於應用程式邏輯。 無論您選擇逐單元格匯出還是資料表匯出,列標題都會完美地傳輸到 Excel 中。 這樣可以輕鬆地將 DataGridView 資料轉換為 Excel 格式,而不會遺失任何有用的標題或資料。

我們希望本文能幫助您為 DataGridView 匯出需求實作可靠的解決方案,並且您可以自信地運用今天在這裡學到的技能,將 DataGridView 匯出為 Excel 格式。 如果您正在尋找可靠的 C# 將 DataGridView 匯出到 Excel 並帶有列標題的解決方案,IronXL 提供了一種簡潔、無依賴項的方法來實現此目的。

準備好在您的專案中實施此功能了嗎?首先使用 IronXL 的免費試用版,探索其全部功能。 生產用途的授權許可價格極具競爭力,並包含全面的技術支援。

常見問題解答

如何在 C# 中將 DataGridView 資料匯出至 Excel?

您可以使用 IronXL.Excel 函式庫在 C# 中將 DataGridView 資料匯出至 Excel,該函式庫提供直接且有效率的方式來管理 Excel 檔案,並確保保留列頭。

IronXL 是否支援以列標頭匯出?

是的,IronXL.Excel 支援將 DataGridView 匯出至 Excel,同時保留列標題。此功能可確保您的資料維持有條理且易於詮釋。

使用 IronXL 執行 Excel 匯出任務有何好處?

IronXL 透過保持資料完整性、支援多種 Excel 格式,以及提供易於使用的 API 以無縫整合至 C# 應用程式,為 Excel 匯出任務提供強大的解決方案。

是否可以格式化用 IronXL.Excel 建立的 Excel 檔案?

是的,IronXL.Excel 允許您格式化 Excel 檔案,包括為儲存格、行和列設定樣式,讓您輕鬆自訂匯出資料的外觀。

我可以使用 IronXL.Excel 從 DataGridView 匯出大型資料集到 Excel 嗎?

IronXL.Excel 已針對效能進行最佳化,可讓您有效率地將大型資料集從 DataGridView 匯出至 Excel,而不會影響速度或應用程式效能。

哪些 C# 版本與 IronXL 相容?

IronXL 與多種 C# 版本相容,使其成為使用各種 .NET 環境的開發人員的多用途選擇。

如何開始使用 IronXL 匯出資料?

若要開始使用 IronXL,您可以從 Iron Software 的網站下載函式庫,並依照他們詳細的說明文件和教學將其整合到您的 C# 專案中。

IronXL 適合小型和大型專案嗎?

是的,IronXL 是專為處理小型和大型專案而設計,提供可擴充性和效能,以滿足不同的應用程式需求。

IronXL 能處理不同的 Excel 檔案格式嗎?

IronXL.Excel 支援多種 Excel 檔案格式,包括 XLSX、XLS 和 CSV,讓您可以靈活地管理和匯出資料。

IronXL 用戶可獲得哪些支援?

IronXL 使用者可以存取廣泛的文件、教學,以及回應迅速的支援團隊,以協助解決任何可能出現的問題。

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