문제

OLEDB를 사용하여 Excel 파일을 읽습니다.열 중 하나는 "일반적인"형식이 있으며 숫자로 구성된 문자와 값이있는 문자열을 모두 포함합니다.문자열 값은 문제없이 검색되지만 순수한 숫자 값은 DBNull로 검색됩니다.

해결 방법

다음과 같은 연결 문자열을 사용하여 excel 2003 파일 (xls) :

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

도움이 되었습니까?

해결책

시나리오에 적용되는 Microsoft 웹 사이트에 대한 설명을 찾았습니다.모든 숫자를 문자열로 변환하는 것이 좋습니다.

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

이전에 기술 된 바와 같이 ADO는 Excel 워크 시트 또는 범위의 각 열의 데이터 유형을 추측해야합니다.(이것은 Excel 셀 서식 설정의 영향을받지 않습니다.) 동일한 열에 텍스트 값과 혼합 된 숫자 값이있는 경우 심각한 문제가 발생할 수 있습니다.JET와 ODBC 제공자는 모두 다수 유형의 데이터를 반환하지만 소수 데이터 형식에 대해 NULL (비어있는) 값을 반환합니다.두 가지 유형이 열에 똑같이 혼합되면 공급자는 텍스트를 통해 숫자를 선택합니다.

예 :

* 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.
.

다른 팁

동일한 문제가 있지만 문자열 값이 있습니다.숫자 값이 리턴되지만 문자열 값은 null로 반환됩니다.숫자 값을 문자열 값으로로드하고 싶습니다.열은 숫자와 비 숫자 코드를 포함 할 수 있습니다 (예 : 100344567 및 PRD001x01).

Excel 드라이버는 처음 8 행의 값이 숫자 유형이므로 숫자가 숫자를 입력하는 것으로 간주합니다.

셀을 텍스트 (셀 포맷)로 정의하더라도 작동하지 않습니다.

드라이버가 "보기"를 강제로 숫자로 문자열로 사용하면 단순히 숫자 값 앞에 견적을 넣으십시오 ( '100344567).이것은 숫자 값을 문자열로 바꿉니다.

이 값 8 행은 레지스트리 HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Jet \ 4.0 \ Engines \ Excel \ -> TypeGuessRows= 8.

레지스트리에 정의됩니다.

도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top