天天看點

C# EXCEL導入 混合列文字為空,找不到可安裝的 ISAM的解決辦法

C# EXCEL導入 混合列文字為空,找不到可安裝的 ISAM的解決辦法 

使用C#導入

Excel資料到 DataTable,如果連接配接串中隻寫 Excel

8.0,則正常的字元列,數值列都沒有問題,但對于既有數字也有字元的混合列,則讀出為空。 

  後來從網上查到加入IMEX=1

就可将混合型轉換為文本,就是連接配接串為Excel 8.0;IMEX=1,但這有出現 “找不到可安裝的

ISAM”。 

  後來在其兩邊加上單引号‘ 就可解決。也就是 ‘Excel

8.0;IMEX=1‘ 

  EXCEL

預設若前8行都沒有出現文本,那麼就認為這一列的所有值都是數字,可以在系統資料庫下面語句處修改為預設值,比如500,但盡量将字元行向前。 

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel 

最後完整的函數如下: 

public

static System.Data.DataTable CallExcel(string FilePath, string

sheetName) 

OleDbConnection con =

new OleDbConnection(‘Provider=Microsoft.Jet.OLEDB.4.0;Data Source=‘ + FilePath +

‘;Extended Properties=‘Excel

8.0;HDR=YES;IMEX=1‘‘); 

con.Open(); 

string

sql = ‘select * from [‘ + sheetName +

‘$]‘;//[Sheet1$]‘;////選擇第一個資料SHEET 

//OleDbCommand command

= new OleDbCommand(sql, con); 

//OleDbDataReader reader =

command.ExecuteReader(); 

//if

(reader.Read()) 

//{ 

//

reader[0].ToString();//直接讀出資料 

//} 

OleDbDataAdapter

adapter = new OleDbDataAdapter(sql,

con); 

System.Data.DataTable dt = new

System.Data.DataTable(); 

adapter.Fill(dt); 

//reader.Close(); 

//command.Dispose(); 

con.Close(); 

con.Dispose(); 

return

dt; 

}