C# OleDb讀取Excel檔案 避免出現 科學計數法 的列

來源:互聯網
上載者:User

 

在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'";

問題就解決了。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.