2010-07-08 33 views
5

Tôi sử dụng OleDB để đọc tệp Excel. Một trong các cột có định dạng "Chung" và chứa cả hai chuỗi có các chữ cái và giá trị chỉ bao gồm các số. Các giá trị chuỗi được lấy ra mà không có vấn đề, nhưng các giá trị số nguyên chất được lấy ra là DBNull.DBNull trong ô không trống khi đọc tệp Excel qua OleDB

Cách giải quyết?

tôi sử dụng chuỗi kết nối sau để mở Excel 2003 tập (xls):

"Provider=Microsoft.Jet.OLEDB.4.0; 
Data Source=C:\\file.xls; 
Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"" 

Trả lời

6

tôi tìm thấy một số tài liệu trên trang web của Microsoft áp dụng cho kịch bản của mình. Họ khuyên bạn nên chuyển đổi tất cả các số học thành chuỗi.

http://support.microsoft.com/kb/257819

Như đã trình bày ở trên, ADO phải đoán ở kiểu dữ liệu cho mỗi cột trong bảng tính Excel của bạn hoặc phạm vi. (Điều này không bị ảnh hưởng bởi cài đặt định dạng ô Excel.) Một vấn đề nghiêm trọng có thể phát sinh nếu bạn có giá trị số được trộn với giá trị văn bản trong cùng một cột. Cả Jet và ODBC Provider đều trả về dữ liệu của kiểu đa số, nhưng trả về giá trị NULL (trống) cho kiểu dữ liệu thiểu số. Nếu hai loại được trộn lẫn nhau trong cột, nhà cung cấp chọn số trên văn bản.

Ví dụ:

* In your eight (8) scanned rows, if the column contains five (5) numeric values and three (3) text values, the provider returns five (5) numbers and three (3) null values. 
* In your eight (8) scanned rows, if the column contains three (3) numeric values and five (5) text values, the provider returns three (3) null values and five (5) text values. 
* In your eight (8) scanned rows, if the column contains four (4) numeric values and four (4) text values, the provider returns four (4) numbers and four (4) null values. 
+3

Tôi đã thêm 'IMEX = 1' để thực thi chế độ văn bản (tôi cần truy xuất ô này dưới dạng văn bản không phải dạng số) nhưng không giúp được gì. Không thể nhập lại giá trị ở chế độ văn bản vì có nhiều giá trị trong số đó. Có thể tự động hóa nó bằng cách nào đó không? – flashnik

+0

Nếu bạn thử đề xuất này bằng cách sử dụng truy vấn thay vì tên bảng/bảng trực tiếp thì sao? Hạn chế nhẹ là tất cả các cột đi qua như chuỗi sau đó. http://munishbansal.wordpress.com/2009/12/15/importing-data-from-excel-having-mixed-data-types-in-a-column-ssis/ – jdot

1

Tôi có cùng một vấn đề nhưng với giá trị chuỗi. Các giá trị số được trả về nhưng các giá trị chuỗi được trả về là NULL. Tôi muốn tải các giá trị số dưới dạng giá trị chuỗi. Cột có thể chứa các chữ số và các mã không phải là số (ví dụ: 100344567 và PRD001X01).

Trình điều khiển Excel xem xét cột có kiểu số vì các giá trị trong 8 hàng đầu tiên thuộc loại số.

Thậm chí nếu tôi xác định ô là Văn bản (Định dạng ô), nó không hoạt động.

Để buộc trình điều khiển "nhìn thấy" cột dưới dạng chuỗi, tôi chỉ cần đặt báo giá trước giá trị số ('100344567). Điều này biến giá trị số thành một chuỗi.

Giá trị này của 8 hàng được định nghĩa trong Registry HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel \ -> TypeGuessRows = 8.

Tôi hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan