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