C#如何利用Oledb進行Excel表格的讀取
阿新 • • 發佈:2018-12-27
string fileName = "資料.xlsx";
string connnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
首先定義一個字串儲存excelbiaoge的路徑資訊;
接著再定義一個字串 這個字串用來連線你的excel表格資訊的 如果是.xlsx格式就用上面這個,如果是.xls格式的就使用下面的
"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; ```注意 這個連線字串不能寫錯,空格都不能少,分號也是都要一字一字完整沒錯漏。
接著需要引入兩個名稱空間
using System.Data.OleDb;
using System.Data;
接著寫下面程式碼
//新建一個連線
OleDbConnection connection = new OleDbConnection(connnectionString);
//開啟連線
connection.Open();
接著
//sql 查詢語句 string sql = "select* from [sheet1$]"; OleDbDataAdapter adapater = new OleDbDataAdapter(sql,connection); DataSet dataset = new DataSet();//用來存放資料 用來存放DataTable adapater.Fill(dataset);//把查詢到的結果放到dataset裡面 connection.Close();
sql是查詢語句,可以查詢excel中的哪一張表 sheet1 或者 sheet2,記得後面要加$符號
adapater是介面卡 可以把查詢到的結果通過 adapater.fill 方法將資料存到dataset當中去
dataset是用來放資料的類,可以放很多張表格
以上步驟就是用來連線excel並解析資料的。
下面就是真正的讀取資料了
DataTableCollection tablecollection = dataset.Tables; DataTable datatable = tablecollection[0]; DataRowCollection datarowcollection = datatable.Rows; foreach (DataRow item in datarowcollection) { for (int t = 0; t < 3; t++) { Console.Write(item[t] +" "); } Console.WriteLine("\n"); } Console.ReadKey();
dataset.Tables 方法可以獲取dataset中的所有表格資訊
通過索引值 tablecollection[0] 可以獲取到第一張表,接著通過datatable.Rows可以獲取表中的所有行的資訊,最後遍歷就可以獲取到所有資料啦。
注意:這裡是獲取不到表格的第一行資料的。會被預設當作是表頭而不進行讀取。想要獲得表頭可以用datatable.Columns[1].ColumnName
完整程式碼
static void Main(string[] args)
{
string fileName = "裝備1.xlsx";
string connnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
OleDbConnection connection = new OleDbConnection(connnectionString);
//開啟連線
connection.Open();
//sql 查詢語句
string sql = "select* from [sheet1$]";
//介面卡 需要兩個引數 一個是sql語句 一個是連線字串
OleDbDataAdapter adapater = new OleDbDataAdapter(sql,connection);
DataSet dataset = new DataSet();//用來存放資料 用來存放DataTable
adapater.Fill(dataset);//把查詢到的結果放到dataset裡面
//關閉連線
connection.Close();
//取得資料
//獲取所有的查詢到的表格資訊的集合
DataTableCollection tablecollection = dataset.Tables;
//獲取一張表
DataTable datatable = tablecollection[0];
//獲取表的所有行
DataRowCollection datarowcollection = datatable.Rows;
foreach (DataRow item in datarowcollection)
{
for (int t = 0; t < 3; t++)
{
Console.Write(item[t] +" ");
}
Console.WriteLine("\n");
}
Console.ReadKey();
}
}