2017-09-12 1 views
1

ACE.OLEDB.12.0에서 아래의 연결 문자열을 사용하여 XLSX 스프레드 시트에서 데이터를 읽었지만 IMEX = 1로 설정했습니다. IBEX = 1을 완전히 제거 할 때 작동하지 않습니다. 정상적으로 작동합니다.ACEX.OLEDB.12.0에서 IMEX = 1이 작동하지 않는 Excel 시트 읽기

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Working Folder\ICDE\Ramsden 4.xlsx;Extended Properties=""Excel 12.0 xml;HDR=No;IMEX=1;""" 

아무도 이유를 설명 할 수 있습니까? IMEX = 1이 모든 데이터를 텍스트로 읽으므로 더 안전합니다.

감사

JP

답변

1

IMEX = 1 텍스트로하지 반환 모든 데이터를 않습니다. 그것은 매우 흔한 오해입니다.

OLEDB는 처음 n 개 행 (기본값 = 8)을 스캔하고 데이터 형식을 결정합니다. IMEX = 1을 생략하면 해당 데이터 유형과 일치하지 않는 모든 값에 대해 Null이 반환됩니다. IMEX = 1을 포함 시키면 스캔에서 혼합 된 데이터 유형이 발생하면 텍스트가 반환됩니다. 시트에 텍스트 헤더가 있으면 HDR = No를 지정하고 헤더를 버림으로써이 프로세스를 도울 수 있습니다. 그러나 OLEDB는 입니다. 항상은 첫 번째 n 개의 행을 스캔하여 데이터 유형을 판별하고 결과를 적절하게 리턴합니다.

검색 할 행은 TypeGuessRows의 값에 의해 결정됩니다.

이전 Microsoft.Jet.OLEDB.4.0 드라이버를 사용하면 연결 문자열에 TypeGuessRows를 지정할 수 있지만 Microsoft.ACE.OLEDB.12.0은 지정할 수 없습니다. TypeGuessRows 이제 64 비트 컴퓨터에서 실행

Excel 2007: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 
Excel 2010: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 
Excel 2013: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 

32 비트 응용 프로그램이 Wow6432Node에서 찾을 것입니다 ... 아래의 레지스트리에서 개최된다. 예 ...

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 

내 의견으로는 역행 조치이지만 올바른 이유가 있어야합니다. 당신이 우리를 알게되면 찾는다.

+0

설명해 주셔서 감사합니다. IMEX 이후의 숫자는 스캔 할 행의 수입니까? – JPScerri

+0

아니, 슬프게도. 검사 할 행은 위에서 설명한대로 TypeGuessRows로 레지스트리에 있습니다. –

+0

IMEX 값의 열거 자 (enumerator)가 있습니까? – JPScerri

관련 문제