博客 / 詳情

返回

C# 中 Excel 轉 DataTable 的技術實現

在企業級 .NET 開發場景中,Excel 文件與內存數據集(如 DataTable)的格式互轉是高頻技術需求。DataTable 作為 .NET 框架中通用的內存數據結構,常被用於承接 Excel 數據並完成後續的數據驗證、持久化、展示等操作。本文聚焦於 .NET 環境下,如何通過第三方類庫實現 Excel 文件到 DataTable 的高效轉換,核心講解數據轉換的技術實現邏輯與關鍵方法的使用。

在開始前可通過NuGet包管理器快速安裝 Free Spire.XLS for .NET 免費庫,具體步驟如下:

  1. 右鍵項目 → 管理 NuGet 程序包;
  2. 搜索對應類庫名稱並安裝最新穩定版;
  3. 或在 Package Manager Console 執行命令:
Install-Package FreeSpire.XLS

注意:該類庫的免費版本存在數據量使用限制,適用於小規模數據處理場景。


核心實現:Excel 轉 DataTable

1. 基礎實現:完整轉換流程

以下代碼實現 Excel 文件到 DataTable 的核心轉換邏輯,覆蓋 “加載 Excel 文件 → 選取目標工作表 → 調用封裝方法完成數據轉換 → 驗證轉換結果” 全流程,可直接用於基礎轉換場景:

using Spire.Xls;
using System;
using System.Data;

namespace ExcelToDataTableDemo
{
    class Program
    {
        static void Main()
        {
            // 定義Excel文件路徑
            string excelFilePath = "Sample.xlsx";

            // 1. 初始化Workbook並加載Excel文件
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(excelFilePath);

            // 2. 獲取第一個工作表(索引從0開始)
            Worksheet sheet = workbook.Worksheets[0];

            // 3. 核心:調用內置ExportDataTable方法轉換
            // 參數1:要導出的單元格範圍(AllocatedRange表示工作表的有效數據範圍)
            // 參數2:是否將第一行作為DataTable的列名
            DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);

            // 4. 驗證轉換結果:輸出數據信息
            Console.WriteLine("=== Excel轉DataTable結果 ===");
            // 輸出總行數(排除表頭)
            Console.WriteLine($"數據總行數:{dataTable.Rows.Count}");
            // 輸出列名
            Console.Write("列名:");
            foreach (DataColumn col in dataTable.Columns)
            {
                Console.Write(col.ColumnName + "\t");
            }
            Console.WriteLine("\n=== 數據內容 ===");
            // 輸出所有行數據
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var cellValue in row.ItemArray)
                {
                    Console.Write(cellValue + "\t");
                }
                Console.WriteLine();
            }
        }
    }
}

2. 進階用法:自定義轉換範圍與參數

ExportDataTable 提供多個重載方法,可滿足“指定轉換範圍、是否導出計算公式值”等個性化開發需求,以下是兩類典型的進階使用場景:

場景1:指定行/列範圍轉換(如第2-10行、第1-3列)

// 獲取指定範圍的單元格(行/列索引均從1開始)
CellRange targetRange = sheet.Range["A2:C10"];
// 轉換指定範圍,且不將第一行作為列名(因範圍從第2行開始)
DataTable dataTable = sheet.ExportDataTable(targetRange, false);

場景2:轉換時計算公式值

// 重載方法:第三個參數控制是否計算公式值。
// 參數説明:
// range:轉換範圍
// exportColumnNames:是否將第一行作為列名
// computedFormulaValue:是否計算公式值
DataTable dataTable = sheet.ExportDataTable(
    sheet.AllocatedRange, 
    true,  
    true
);

在.NET開發中,通過 ExportDataTable 方法可實現 Excel 數據到 DataTable 的批量轉換,該方法通過封裝底層的單元格遍歷、數據類型映射邏輯,替代了手動逐單元格讀取數據的方式,是 Excel 與 DataTable 互轉場景下的高效實現方案。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.