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