在EXCEL中,輸入超過11位元字時,會自動轉為科學計數的方式,比如:123456789012345,輸入後就變成了:1.23457E14,Excle裡可以更改此列的格式為文本。或者添加" ' " ,即 '123456789012345 。先輸入一個英文單引號“'”,再輸入數值。那麼Excel就認為是文本了,而不會強制變為科學計數法。
用c#的OLEDB匯入Excel到資料庫產生科學計數法問題解決 。
發現Excel的列中只要數字字元較長時oledb讀出的記錄資料會以科學計數法顯示。450107630382345變為4.5010763038+14 。
主要問題在連接字串。
"Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
OLEDB的Excel的IMEX和HDR是什麼意思?
Extended Properties=""Excel 8.0;HDR=yes;IMEX=1""
A: HDR ( HeaDer Row )設定
若指定值為Yes,代表 Excel 檔中的工作表第一行是欄位名稱
若指定值為 No,代表 Excel 檔中的工作表第一行就是資料了,沒有欄位名稱
B:IMEX ( IMport EXport mode )設定
IMEX 有三種模式,各自引起的讀寫行動也不合,容後再述:
0 is Export mode
1 is Import mode
2 is Linked mode (full capabilities)
我這裡希罕要申明的就是 IMEX 參數了,因為不合的模式代表著不合的讀寫行動:
當 IMEX=0 時為“匯出模式”,這個模式開啟的 Excel 檔案只能用來做“寫入”用處。
當 IMEX=1 時為“匯入模式”,這個模式開啟的 Excel 檔案只能用來做“讀取”用處。
當 IMEX=2 時為“連結模式”,這個模式開啟的 Excel 檔案可同時增援“讀取”與“寫入”用處。
所謂“4.5010763038+14 ”只是顯示用的,實際還是“450107630382345”。所以使用讀取即 IMEX=1時,得到“4.5010763038+14 ”。
而 IMEX=0時,得到“450107630382345”。
我們需要把連接字串改為
"Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=0'";
問題就解決了。