C#實(shí)現(xiàn)讀取Excel文件并將數(shù)據(jù)寫入數(shù)據(jù)庫和DataTable
Excel文件是存儲(chǔ)表格數(shù)據(jù)的普遍格式,因此能夠高效地讀取和提取信息對(duì)于我們來說至關(guān)重要。C#語言借助.NET Framework和各種庫的廣泛功能,能夠進(jìn)行高效的數(shù)據(jù)操作。利用C#讀取Excel文件并將數(shù)據(jù)寫入數(shù)據(jù)庫和DataTable,或者將數(shù)據(jù)用于其他目的,對(duì)于開發(fā)人員來說是一個(gè)處理Excel數(shù)據(jù)的優(yōu)秀解決方案。
本文所使用的方法需要用到Excel文件處理庫Spire.XLS for .NET,可從官網(wǎng)下載或在NuGet中搜索安裝,也可在項(xiàng)目管理控制臺(tái)輸入:PM> Install-Package Spire.XLS安裝。
使用C#讀取Excel文件引導(dǎo)
為了有效地利用Spire.XLS for .NET讀取Excel文件數(shù)據(jù)并寫入其他位置,需要熟悉其中的一些類、屬性和方法。下表總結(jié)了一些主要的類、屬性和方法以及它們的功能和描述:
項(xiàng)目 | 描述 |
---|---|
Workbook | 代表Excel工作簿并提供讀取和操作其內(nèi)容的方法 |
Worksheet | 代表工作簿中的單個(gè)工作表 |
Workbook.LoadFromFile 方法 | 從文件加載Excel工作簿 |
Workbook.Worksheets 屬性 | 獲取工作簿中的工作表集合 |
Worksheet.Range[] 屬性 | 獲取工作表中的單元格范圍(索引從1開始) |
CellRange.Value 屬性 | 獲取或設(shè)置單元格的值 |
CellRange.Text 屬性 | 獲取或設(shè)置單元格的顯示文本 |
讀取Excel文件的典型工作流程包括以下步驟:
- 使用 Workbook.LoadFromFile() 方法加載Excel文件。
- 通過 Workbook.Worksheets[] 屬性訪問工作表。
- 通過 Worksheet.Range[] 屬性訪問單元格。
- 通過 CellRange.Text 屬性訪問單元格中顯示的文本,或通過 CellRange.Value 屬性訪問單元格的值(文本、數(shù)字、公式等)。
- 檢索數(shù)據(jù),將數(shù)據(jù)寫入文本文件、數(shù)據(jù)庫等,或執(zhí)行其他所需操作。
- 可以直接使用 Worksheet.ExportDataTable() 方法將單元格值導(dǎo)出到數(shù)據(jù)表,并返回一個(gè)DataTable對(duì)象。
- 還可以直接使用 Workbook.SaveToFile() 方法將工作簿轉(zhuǎn)換為任何支持的格式。
C#代碼讀取Excel文件數(shù)據(jù)并寫入文本
使用C#讀取Excel文件并將數(shù)據(jù)寫入文本文件的步驟如下:
- 導(dǎo)入所需的命名空間。
- 創(chuàng)建 Workbook 類的對(duì)象,并使用 Workbook.LoadFromFile() 方法加載Excel文件。
- 通過 Workbook.Worksheets[] 屬性獲取第一個(gè)工作表。
- 創(chuàng)建一個(gè)文本文件用于寫入工作表中的數(shù)據(jù)。
- 遍歷分配的行和列,在 Worksheet.Range[] 屬性中訪問單元格,并通過 CellRange.Text 屬性獲取每個(gè)單元格的顯示文本,然后將其寫入文本文件中。
- 釋放資源。
代碼示例:
using Spire.Xls; using System.IO; class Program { static void Main(string[] args) { // 加載Excel文件 Workbook workbook = new Workbook(); workbook.LoadFromFile("Sample.xlsx"); // 獲取第一個(gè)工作表 Worksheet worksheet = workbook.Worksheets[0]; // 創(chuàng)建輸出文本文件 string outputFile = "Output.txt"; StreamWriter writer = new StreamWriter(outputFile); // 遍歷工作表的行和列,并將數(shù)據(jù)寫入文本文件 for (int row = 1; row <= worksheet.LastRow; row++) { for (int col = 1; col <= worksheet.LastColumn; col++) { CellRange range = worksheet.Range[row, col]; string cellValue = range.Text == null ? string.Empty : range.Text.ToString(); writer.Write(cellValue + "\t"); // 使用制表符作為單元格數(shù)據(jù)的分隔符 } writer.WriteLine(); // 寫入換行符 } // 關(guān)閉寫入器并保存文本文件 writer.Close(); // 釋放資源 workbook.Dispose(); } }
讀取結(jié)果:
使用C#代碼將Excel文件讀取到DataTable對(duì)象中
DataTable是.NET Framework中表示數(shù)據(jù)表的對(duì)象。它用于在內(nèi)存中存儲(chǔ)和操作數(shù)據(jù),并可以執(zhí)行排序、篩選、修改和導(dǎo)出等操作。使用C#讀取Excel文件數(shù)據(jù)并將其寫入DataTable對(duì)象,可以方便進(jìn)一步處理數(shù)據(jù)。以下是具體步驟:
- 導(dǎo)入所需的命名空間。
- 創(chuàng)建 Workbook 類的對(duì)象,并使用 Workbook.LoadFromFile() 方法加載Excel文件。
- 通過 Workbook.Worksheets[] 屬性獲取第一個(gè)工作表。
- 使用 Worksheet.ExportDataTable() 方法將工作表中的數(shù)據(jù)導(dǎo)出到一個(gè) DataTable 對(duì)象中。
- 釋放資源。
代碼示例:
using Spire.Xls; using System.Data; namespace ExcelToAccess { class Program { static void Main(string[] args) { // 創(chuàng)建Workbook類的對(duì)象 Workbook workbook = new Workbook(); // 加載Excel文件 workbook.LoadFromFile("Sample.xlsx"); // 獲取第一個(gè)工作表 Worksheet worksheet = workbook.Worksheets[0]; // 將工作表中的數(shù)據(jù)導(dǎo)出到一個(gè)DataTable對(duì)象 DataTable dataTable = worksheet.ExportDataTable(); workbook.Dispose(); } } }
C#代碼讀取Excel文件并插入到數(shù)據(jù)庫中
這個(gè)示例展示了如何使用C#代碼將Excel工作表數(shù)據(jù)寫入Access數(shù)據(jù)庫。這種方法還需要使用System.Data.OleDb命名空間。如果你使用的.NET Framework沒有它,你可以通過在Package Management Console中輸入以下代碼來安裝它:Install-Package System.Data.OleDb。
讀取Excel文件并插入到數(shù)據(jù)庫的步驟如下:
- 導(dǎo)入所需的命名空間。
- 創(chuàng)建 Workbook 類的對(duì)象,并使用 Workbook.LoadFromFile() 方法加載Excel文件。
- 通過 Workbook.Worksheets[] 屬性獲取第一個(gè)工作表。
- 通過訪問 Worksheet.Name 屬性,獲取工作表名稱作為表名。
- 通過使用 Worksheet.Rows[] 屬性訪問第一行的 CellRange 對(duì)象,將每個(gè)列的值存儲(chǔ)在一個(gè)字符串?dāng)?shù)組中,作為列名。
- 使用 OleDbConnection 連接到Access數(shù)據(jù)庫,指定連接字符串和數(shù)據(jù)庫文件路徑。
- 通過動(dòng)態(tài)生成一個(gè)用于創(chuàng)建表的SQL查詢字符串,包括表名、列名和數(shù)據(jù)類型,創(chuàng)建數(shù)據(jù)表。
- 使用 OleDbCommand 對(duì)象和 ExecuteNonQuery 方法執(zhí)行創(chuàng)建表的查詢。
- 通過遍歷Excel工作表的每一行(從第二行開始),構(gòu)造帶有參數(shù)化查詢的插入語句,將每一行的數(shù)據(jù)插入Access數(shù)據(jù)庫表中。
- 關(guān)閉數(shù)據(jù)庫連接并釋放資源。
代碼示例:
using Spire.Xls; using System.Data.OleDb; class Program { static void Main(string[] args) { // 設(shè)置Excel文件路徑 string excelFilePath = "Sample.xlsx"; // 設(shè)置Access數(shù)據(jù)庫文件路徑 string accessDbFilePath = "Sample.accdb"; // 加載Excel文件 Workbook workbook = new Workbook(); workbook.LoadFromFile(excelFilePath); // 獲取第一個(gè)工作表 Worksheet worksheet = workbook.Worksheets[0]; // 使用工作表名稱作為表名 string tableName = worksheet.Name; // 獲取第一行作為列名 CellRange headerRange = worksheet.Rows[0]; string[] columnNames = new string[headerRange.Columns.Length]; for (int i = 0; i < headerRange.Columns.Length; i++) { columnNames[i] = headerRange.Columns[i].Value.Replace(" ", "_"); } // 連接到Access數(shù)據(jù)庫 string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessDbFilePath};Persist Security Info=False;"; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); // 創(chuàng)建表 string createTableQuery = $"CREATE TABLE [{tableName}] ({string.Join(", ", columnNames.Select(c => $"[{c}] Memo"))})"; using (OleDbCommand createTableCommand = new OleDbCommand(createTableQuery, connection)) { createTableCommand.ExecuteNonQuery(); } // 插入數(shù)據(jù) string insertQuery = $"INSERT INTO [{tableName}] ({string.Join(", ", columnNames.Select(c => $"[{c}]"))}) VALUES ({string.Join(", ", columnNames.Select(c => $"@{c}"))})"; using (OleDbCommand insertCommand = new OleDbCommand(insertQuery, connection)) { foreach (CellRange row in worksheet.Rows.Cast().Skip(1)) { for (int i = 0; i < row.Columns.Length; i++) { insertCommand.Parameters.AddWithValue($"@{columnNames[i]}", row.Columns[i].Value); } insertCommand.ExecuteNonQuery(); insertCommand.Parameters.Clear(); } } connection.Close(); workbook.Dispose(); } } }
讀取寫入結(jié)果:
本文中介紹了如何使用 C# 來讀取 Excel 文件并提取數(shù)據(jù)用于各種用途。通過利用 Spire.XLS for .NET 的強(qiáng)大功能,開發(fā)人員可以高效地處理 Excel 數(shù)據(jù)、將其導(dǎo)出為不同格式并增強(qiáng)數(shù)據(jù)驅(qū)動(dòng)型應(yīng)用程序。
以上就是C#實(shí)現(xiàn)讀取Excel文件并將數(shù)據(jù)寫入數(shù)據(jù)庫和DataTable的詳細(xì)內(nèi)容,更多關(guān)于C#讀取Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Unity中Mask和RectMask2D組件的對(duì)比與測(cè)試
本篇文章給大家介紹Unity中Mask和RectMask2D組件的對(duì)比與測(cè)試,包括組件用法及RectMask2D的基本用法,通過Mask的原理分析實(shí)例代碼相結(jié)合給大家講解的非常詳細(xì),需要的朋友參考下吧2021-06-06C#操作本地文件及保存文件到數(shù)據(jù)庫的基本方法總結(jié)
C#使用System.IO中的文件操作方法在Windows系統(tǒng)中處理本地文件相當(dāng)順手,這里我們還總結(jié)了在Oracle中保存文件的方法,嗯,接下來就來看看整理的C#操作本地文件及保存文件到數(shù)據(jù)庫的基本方法總結(jié)2016-05-05C#?使用EntityFramework?CodeFirst?創(chuàng)建PostgreSQL數(shù)據(jù)庫的詳細(xì)過程
這篇文章主要介紹了C#使用EntityFramework?CodeFirst創(chuàng)建PostgreSQL數(shù)據(jù)庫的過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Visual Studio連接unity編輯器的實(shí)現(xiàn)步驟
unity編輯器中打開C#腳本的時(shí)候發(fā)現(xiàn)Visual Studio沒有連接unity編輯器,本文主要介紹了Visual Studio連接unity編輯器的實(shí)現(xiàn)步驟,感興趣的可以了解一下2023-11-11深入解析C#中的交錯(cuò)數(shù)組與隱式類型的數(shù)組
這篇文章主要介紹了深入解析C#中的交錯(cuò)數(shù)組與隱式類型的數(shù)組,隱式類型的數(shù)組通常與匿名類型以及對(duì)象初始值設(shè)定項(xiàng)和集合初始值設(shè)定項(xiàng)一起使用,需要的朋友可以參考下2016-01-01C#中類成員的定義的修飾關(guān)鍵詞知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了關(guān)于C#中類成員的定義的修飾關(guān)鍵詞知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。2020-02-02