Use-Oledb-Read-Excel-Null
Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Data.xls";Extended Properties="Excel 8.0;HDR=Yes;IMEX=1;
正常來說只要OleDb連線自串像上面這樣寫就可以正常存取Excel
但實際操作後卻發現如果前面幾列沒有資料,後面的資料也抓不到
解決方法是: 修改機碼
要將HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel\ 下面的 TypeGuessRows 設為 0
預設值 8 表示由前8列的資料型態來決定後面的型態
例如:如果前面都8列是數值,第9列過後也都會是數值,如果不是就回傳Null
下面大致上寫如何透過OleDb 讀取 Excel
//定義OLE======================================================
//1.檔案位置
string FileName = "c:\\test.xls";
//2.提供者名稱
string ProviderName = "Microsoft.Jet.OLEDB.4.0;";
//3.Excel版本,Excel 8.0 針對Excel2000及以上版本,Excel5.0 針對Excel97。
string ExtendedString = "'Excel 8.0;";
//4.第一行是否為標題
string Hdr = "No;";
//5.IMEX=1 通知驅動程序始終將「互混」數據列作為文本讀取 0:讀取 1:寫入 2:讀/寫
string IMEX = "1';";
//=============================================================
//連線字串
string cs = string.Format("Data Source={0};Provider={1};Extended Properties={2};HDR={3};IMEX={4}", FileName, ProviderName, Hdr, IMEX);
using (OleDbConnection conn = new OleDbConnection(cs))
{
conn.Open();
//工作表名稱需要加$字串
string cmdText = "select * from[" + "S10T" + "$]";
try
{
using (OleDbCommand cmd = new OleDbCommand(cmdText, conn))
{
using (OleDbDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
Response.Write(string.Format("{0},{1},{2}", dr[0].ToString(), dr[0].ToString(), dr[0].ToString()));
}
}
}
}
}
參考:
http://blog.miniasp.com/post/2008/08/05/How-to-read-Excel-file-using-OleDb-correctly.aspx
http://sanchen.blogspot.tw/2007/08/imex1-oledb-excel-null.html