C#實現(xiàn)Excel與DataTable的數(shù)據(jù)互轉的代碼示例
引言
在.NET框架中,使用C#進行Excel數(shù)據(jù)與DataTable之間的轉換是數(shù)據(jù)分析、報表生成、數(shù)據(jù)遷移等操作中的常見需求。這一過程涉及到將Excel文件中的數(shù)據(jù)讀取并加載至DataTable中,以便于利用.NET提供的豐富數(shù)據(jù)處理功能進行操作,同時也包括將DataTable中的數(shù)據(jù)導出至Excel文件,以實現(xiàn)數(shù)據(jù)的可視化或共享。本文將介紹如何通過C#語言實現(xiàn)Excel數(shù)據(jù)與DataTable之間的高效轉換。
本文使用的方法需要用到免費的Free Spire.XLS for .NET,NuGet:PM> Install-Package FreeSpire.XLS
。
將數(shù)據(jù)從DataTable導出到Excel文件
我們可以使用Worksheet.AllocatedRange
屬性獲取Excel工作表中的已使用的單元格范圍,然后根據(jù)行數(shù)和列數(shù),讀取數(shù)據(jù)并添加到DataTable
對象中。以下是操作步驟:
- 導入所需模塊。
- 創(chuàng)建
Workbook
對象,使用Workbook.LoadFromFile()
方法載入Excel文件。 - 使用
Workbook.Worksheets[]
屬性獲取需要的工作表。 - 創(chuàng)建
DataTable
實例。 - 遍歷工作表第一行數(shù)據(jù),使用
Worksheet.AllocatedRange[].Value
屬性獲取其中單元格的值,最后使用DataTable.Columns.Add()
方法將其導入為DataTable
的列名。 - 遍歷剩余各行,使用同樣的方法獲取單元格數(shù)據(jù),并寫入到
DataTable
各行中。 - 輸出結果。
代碼示例
using Spire.Xls; using System.Data; namespace ExcelToDataTable { class Program { static void Main(string[] args) { // 創(chuàng)建Workbook的實例 Workbook wb = new Workbook(); // 載入Excel文件 wb.LoadFromFile("Sample.xlsx"); // 獲取一個工作表 Worksheet sheet = wb.Worksheets[0]; // 創(chuàng)建一個DataTable實例 DataTable dataTable = new DataTable(); // 將第一行作為列名添加到DataTable for (int col = 1; col <= sheet.AllocatedRange.ColumnCount; col++) { if (sheet.AllocatedRange[1, col].Value != null) { dataTable.Columns.Add(sheet.AllocatedRange[1, col].Value); } } // 遍歷其余行并將數(shù)據(jù)添加到DataTable for (int row = 2; row <= sheet.AllocatedRange.RowCount; row++) { DataRow dataRow = dataTable.NewRow(); for (int col = 1; col <= sheet.AllocatedRange.ColumnCount; col++) { if (sheet.AllocatedRange[row, col].Value != null) { dataRow[col - 1] = sheet.AllocatedRange[row, col].Value; } } dataTable.Rows.Add(dataRow); } // 輸出列名 foreach (DataColumn column in dataTable.Columns) { Console.Write(column.ColumnName + "\t"); } Console.WriteLine(); // 輸出數(shù)據(jù)行 foreach (DataRow row in dataTable.Rows) { foreach (var item in row.ItemArray) { Console.Write(item + "\t"); } Console.WriteLine(); } } } }
結果
將數(shù)據(jù)從Excel表格導入DataTable
Worksheet.Range[].Value
屬性可以幫助我們直接向Excel工作表中的指定單元格寫入數(shù)據(jù)。我們可以將從其他地方獲取到的DataTable
對象中的數(shù)據(jù)搭配此屬性寫入到Excel文件中。以下是操作步驟:
- 導入所需模塊。
- 定義數(shù)據(jù)并使用數(shù)據(jù)構建
DataTable
對象。 - 創(chuàng)建
Workbook
實例。 - 使用
Workbook.Worksheets.Clear()
方法清除默認工作表,然后使用Workbook.Worksheets.Add()
方法新建工作表。 - 遍歷
DataTable
列,使用DataTable.Columns[].ColumnName
屬性獲取列名,最后使用Worksheet.Range[].Value
屬性將列名寫入工作表。 - 遍歷
DataTable
數(shù)據(jù)行和列,使用DataTable.Rows[][].ToString()
方法獲取數(shù)據(jù)為字符串,最后使用Worksheet.Range[].Value
屬性將數(shù)據(jù)寫入工作表。 - 使用
Workbook.SaveToFile()
方法保存Excel文件。 - 釋放資源。
代碼示例
using Spire.Xls; using System.Data; namespace DataTableToExcel { class Program { static void Main(string[] args) { // 定義數(shù)據(jù)列表并創(chuàng)建一個DataTable實例 string[,] data = new string[,] { { "Product", "Quantity", "SalesAmount" }, { "Product A", "100", "5000.0" }, { "Product B", "150", "7500.0" }, { "Product C", "200", "10000.0" }, { "Product D", "120", "6000.0" }, { "Product E", "180", "9000.0" } }; DataTable dataTable = new DataTable(); // 獲取列數(shù) int columnCount = data.GetLength(1); // 添加列 for (int col = 0; col < columnCount; col++) { dataTable.Columns.Add(data[0, col]); } // 添加數(shù)據(jù)行 for (int row = 1; row < data.GetLength(0); row++) { DataRow dataRow = dataTable.NewRow(); for (int col = 0; col < columnCount; col++) { dataRow[col] = data[row, col]; } dataTable.Rows.Add(dataRow); } // 創(chuàng)建Workbook的實例 Workbook workbook = new Workbook(); // 清除默認工作表并添加一個工作表 workbook.Worksheets.Clear(); Worksheet sheet = workbook.Worksheets.Add("SalesReport"); // 寫入列名 for (int col = 0; col < columnCount; col++) { sheet.Range[1, col + 1].Value = dataTable.Columns[col].ColumnName; } // 寫入數(shù)據(jù)行 for (int row = 0; row < dataTable.Rows.Count; row++) { for (int col = 0; col < columnCount; col++) { sheet.Range[row + 2, col + 1].Value = dataTable.Rows[row][col].ToString(); } } // 保存到文件 workbook.SaveToFile("output/DataTableToExcel.xlsx", FileFormat.Version2016); workbook.Dispose(); } } }
結果
本文演示如何使用C#代碼在.NET程序中導入Excel文件數(shù)據(jù)到DataTable以及到處DataTable數(shù)據(jù)到Excel文件。
到此這篇關于C#實現(xiàn)Excel與DataTable的數(shù)據(jù)互轉的代碼示例的文章就介紹到這了,更多相關C# Excel與DataTable數(shù)據(jù)互轉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
WPF利用DrawingContext實現(xiàn)繪制溫度計
這篇文章主要為大家詳細介紹了如何利用WPF和DrawingContext實現(xiàn)繪制溫度計,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,感興趣的小伙伴可以了解一下2022-09-09