string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=localhost;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"
Xin chào. Mục đích của IMEX là gì?IMEX trong chuỗi kết nối OLEDB là gì?
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=localhost;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"
Xin chào. Mục đích của IMEX là gì?IMEX trong chuỗi kết nối OLEDB là gì?
"Nếu bạn muốn đọc các tiêu đề cột vào tập kết quả (sử dụng HDR = NO mặc dù có một tiêu đề) và các dữ liệu cột là số, sử dụng IMEX = 1 để tránh vụ tai nạn.
để luôn sử dụng IMEX = 1 là một cách an toàn hơn để lấy dữ liệu cho các cột dữ liệu hỗn hợp. .."
Xin lưu ý rằng giá trị IMEX có thể rất quan trọng khi bạn cần phải viết lại dữ liệu vào Excel. Tìm kiếm nhanh trên Internet trên IMEX tìm thấy nhiều bài viết về các vấn đề với các giá trị IMEX khác nhau
Khi bạn đang đọc tệp excel vào bảng dữ liệu, bảng dữ liệu đọc giá trị cột và sau khoảng 8-10 bản ghi, nó sẽ gán kiểu dữ liệu cho một cột. Ví dụ, nếu các giá trị cột là
11,0
22,0
33,0
44,0
55,0
66,0
77,0
88,0
99,0
abc
Vì vậy, các bảng dữ liệu sẽ không có giá trị abc như cột đã được gán kiểu dữ liệu "Double". Để tránh điều này, và để đọc dữ liệu đầy đủ IMEX = 1 được sử dụng.
Vui lòng nhận xét cho các truy vấn khác.
Vui lòng sử dụng một hàm tổng quát trong một Module ...
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
Có một vấn đề tiềm ẩn khi đọc file Excel với một OleDbConnection.
Nếu bạn sử dụng
"Extended Properties='Excel 8.0;HDR=NO;IMEX=3;'"
cho một cột như sau nơi 8 hàng đầu tiên có 4 (hoặc hơn) giá trị số, sau đó loại được coi là số và các giá trị chuỗi được đọc như vô giá trị.
Lưu ý rằng tiêu đề không được sử dụng làm tiêu đề ở đây (HDR = NO) do đó hàng "zipcode" là hàng đầu tiên. (Các mã zip đến từ Thụy Điển trong trường hợp bạn không nhận ra định dạng của họ.)
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
Nhưng nếu bạn dữ liệu trông như thế này, nơi chỉ có 3 là số của 8 hàng đầu tiên
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
sau đó nó hoạt động, nó đọc tất cả, như là chuỗi.
Vì vậy, trường hợp đầu tiên là một vấn đề. Nhưng có một giải pháp.
Hãy nói rằng bạn sử dụng
"Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'"
nơi chúng tôi đã thay đổi IMEX 1 và HDR YES, sau đó nó sẽ đọc dữ liệu như các chuỗi trong cả hai trường hợp trên. Nhưng giả sử chúng ta có dữ liệu như thế này
1) zipcode
2) 12545
3) 11550
4) 18735
5) 11335
6) 13940
7) 18155
8) 11759
9) 17674
10) 137 38
sau đó tất cả các dữ liệu 8 hàng đầu tiên là số và sau đó nó lại thất bại, mặc dù chúng ta có IMEX = 1.
Bạn có thể giải quyết vấn đề này theo cách sau. Thay đổi chuỗi kết nối thành số này
"Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'"
Lưu ý rằng chúng tôi giữ IMEX = 1 nhưng đổi lại HDR thành NO.
Bây giờ hàng 1 không được coi là tiêu đề nữa và "zipcode" là đọc dưới dạng dữ liệu và vì nó rõ ràng là chuỗi, tất cả các hàng được đọc dưới dạng chuỗi (đó là cách IMEX = 1 hoạt động).
Có một số hạn chế với phương pháp này. Cả hai có thể được giải quyết:
1) Bạn không thể tham chiếu đến cột theo tên của nó (mã zip) nhưng cần phải sử dụng ví dụ F7 tùy thuộc vào vị trí của cột.
Bạn có thể giải quyết điều này bằng cách tìm ra nơi cột mã bưu điện nằm (có thể được thực hiện theo chương trình) và thay đổi văn bản SQL phù hợp bởi thay đổi "mã bưu điện" để ví dụ như "F7".
2) Giá trị "mã zip" sẽ xuất hiện trong dữ liệu của bạn.
Điều này có thể được giải quyết bằng cách có F7 <> 'mã zip' trong mệnh đề where. Một có thể nghĩ rằng điều này sẽ chống lại thực tế rằng chúng tôi đã bao gồm mã zip (là một chuỗi) để đảm bảo tất cả các hàng được coi là chuỗi. Sau khi đã thử nghiệm điều này, hóa ra mặc dù mệnh đề where mẹo loại trừ "mã zip" không có tác dụng đối kháng .
Cảm ơn bạn đã giải thích chi tiết. Tôi đang xử lý vấn đề này với mã Zip của Hoa Kỳ. Mã zip gồm 5 chữ số được coi là giá trị kép và 5-4 mã zip bị bỏ qua vì chúng là chuỗi: ( – Shiva
Ok, vậy thì IMEX = 2 thì sao? –
Từ đây: http://www.instantpages.ltd.uk/ADODB_WP.htm "MEX = 0 và IMEX = 2 dẫn đến ImportMixedTypes bị bỏ qua và giá trị mặc định của‘ MajorityType ’được sử dụng." – kmp
OK. Nó được sử dụng cho các cột có kiểu dữ liệu hỗn hợp. Cảm ơn bạn đã trả lời –