2012-04-11 37 views

回答

26

ConnectionStrings

「如果你想讀列標題到結果集(使用HDR = NO,即使是有頭)和列數據是數字,使用IMEX = 1,以避免崩潰。

要始終使用IMEX = 1是混合數據列中檢索數據的安全方式。......」

請注意,當你需要寫回的數據IMEX值是非常重要的到Excel。 在IMEX上的Internet上的快速搜索發現了許多關於各種IMEX值問題的文章

+0

好的,那麼IMEX = 2呢? – 2012-04-11 08:17:51

+1

From here:http://www.instantpages.ltd.uk/ADODB_WP.htm「MEX = 0和IMEX = 2將導致ImportMixedTypes被忽略,並使用默認值'MajorityType'。」 – kmp 2012-04-11 08:28:18

+1

明白了。它用於混合數據類型的列。感謝回覆 – 2012-04-11 08:33:27

0

當您將Excel文件讀入數據表時,數據表將讀取列值並在大約8-10條記錄後,將數據類型分配給列。例如,如果列值
11.0
22.0
33.0
44.0
55.0
66.0
77.0
88.0
99.0
ABC
所以,數據表將不具有值abc,因爲該列已分配了數據類型「Double」。爲了避免這種情況,並讀取完整的數據,使用IMEX = 1。
請發表評論以作進一步查詢。閱讀與OleDbConnection的Excel文件時,在模塊

-5

請使用廣義函數...

Public Function DeleteBlankRowsfromDataset(ByRef Dtset As DataSet) As Boolean 
    Try 
     Dtset.Tables(0).AsEnumerable().Where(Function(row) row.ItemArray.All(Function(field) field Is Nothing Or field Is DBNull.Value Or field.Equals(""))).ToList().ForEach(Sub(row) row.Delete()) 
     Dtset.Tables(0).AcceptChanges() 
     DeleteBlankRowsfromDataset = True 
    Catch ex As Exception 
     MsgBox("Deleting Blank Records in Dataset Failed") 
     DeleteBlankRowsfromDataset = False 
    End Try 

End Function 
10

有一個潛在的問題。

如果使用

"Extended Properties='Excel 8.0;HDR=NO;IMEX=3;'" 

像列下列其中前8行具有4(或更多)個數字值, 那麼類型被認爲是數字和字符串值被讀取爲空值。

請注意,此處標題並未用作標題(HDR = NO),所以「zipcode」行是第一行。 (這些郵遞區號是來自瑞典的情況下,你不承認自己的格式。)

1) zipcode 
2) 125 45 
3) 115 50 
4) 18735 
5) 11335 
6) 13940 
7) 181 55 
8) 11759 
9) 176 74 
10) 137 38 

但是,如果你的數據是這樣的,其中只有3個是數字的前8行的

1) zipcode 
2) 125 45 
3) 115 50 
4) 18735 
5) 11335 
6) 139 40 <-- This one changed so that it is a string 
7) 181 55 
8) 11759 
9) 176 74 
10) 137 38 

然後它工作,它讀取所有,作爲字符串。

因此,第一種情況是一個問題。但有一個解決方案。

比方說,您使用

"Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'" 

,我們已經改變了IMEX 1和HDR YES,那麼它將讀取數據,在上述兩種情況下字符串。 但是,讓我們說我們有這樣

1) zipcode 
2) 12545 
3) 11550 
4) 18735 
5) 11335 
6) 13940 
7) 18155 
8) 11759 
9) 17674 
10) 137 38 

前8個數據行,那麼所有的數據都是數字,然後再次失敗,即使我們有IMEX = 1。

您可以通過以下方式解決此問題。將連接字符串更改爲此

"Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'" 

請注意,我們保持IMEX = 1,但將HDR更改爲NO。

現在行1不再被視爲標題,「zipcode」是 作爲數據讀取,因爲它顯然是一個字符串,所有行都被讀爲字符串(這就是IMEX = 1的工作方式)。

這種方法有兩個缺點。兩者都可以解決:

1)您不能通過其名稱(zipcode)引用列,但需要使用例如F7,具體取決於列所在的位置。

您可以搞清楚的郵政編碼列位於 (可以通過編程完成)解決這個問題,並通過 改變「郵政編碼」到例如「F7」更改相應的SQL文本。

2)「zipcode」值將出現在您的數據中。

這可以通過在where子句中使用F7 <>'zipcode'來解決。一個 可能會認爲這將抵消我們包含 郵編(作爲字符串)以確保將所有行視爲字符串的事實。 經過測試,結果發現雖然排除「郵編」的條款 不具備這種抵消 的效果。

+0

感謝您的詳細解釋。我正在用美國郵政編碼處理這個問題。 5位數的郵編被視爲雙重值,5-4郵編被忽略,因爲它們是字符串:( – Shiva 2016-07-08 20:19:19

相關問題