1. 程式人生 > >C#如何利用Oledb進行Excel表格的讀取

C#如何利用Oledb進行Excel表格的讀取

 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();
        }
    }