문제

VB6을 사용하여 Excel (2003) 스프레드 시트에서 값 테이블을 추출하려고합니다. 그 결과는 (ADODB) 레코드 세트에 저장해야합니다. 테이블은 다음과 같습니다.

    Name   Option.1  Option.2  Option.3  Option.4  Option.5  Option.6 
    -----------------------------------------------------------------
    Name1         2         3         4
    Name2         2         3         4
    Name3         2         3         4
    Name4         2         3         4
    Name5         2         3         4
    Name6         2         3         4
    Name7         2         3         4
    Name8         2         3         4
    Name9         2         3         4         5         6         7  

쿼리를 연결하고 실행할 때 "SELECT * FROM [Sheet1$]"또는 칼럼 특정,"SELECT [Option#6] FROM [Sheet1$]"(각주 1 참조) 및 결과를 통한 반복, 나는 주어졌다. Null 행 값 Name9, Option.4 --> Option.6 올바른 값 5, 6 및 7 대신 스프레드 시트와의 연결은 유효한 테이블 한계가 무엇인지 결정하는 "최상의 추측"을 사용하는 것 같습니다.

스프레드 시트에 연결하기 위해 두 연결 제공 업체를 모두 시도했습니다. Microsoft.Jet.OLEDB.4.0 그리고 MSDASQL 그리고 같은 문제를 겪으십시오.

내가 사용하는 연결 설정은 다음과 같습니다.

Set cn = New ADODB.Connection
With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & filePath & ";Extended Properties=Excel 8.0;"
    - - - - OR - - - - 
    .Provider = "MSDASQL"
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
                        "DBQ=" & filePath & ";MaxScanRows=0;"
    .CursorLocation = adUseClient
    .Open
End With  
Set rsSelects = New ADODB.Recordset
Set rsSelects = cn.Execute("SELECT [Option#5] FROM " & "[" & strTbl & "]")

이 문제는 8 행 이상 (열 이름 제외)이있을 때만 발생하며 설정했습니다. MaxScanRow=0MSDASQL 연결이지만 동일한 결과가 발생했습니다.

내가 포함한 주목할만한 프로젝트 참조는 다음과 같습니다.

  • MS ActiveX Data Objects 2.8 라이브러리
  • MS ActiveX Data Objects RecordSet 2.8 라이브러리
  • MS Excel 11.0 객체 라이브러리
  • MS 데이터 바인딩 컬렉션 VB 6.0 (SP4)

이 문제에 대한 도움을 주셔서 감사합니다!

(1) 어떤 이유로, 열 이름에 소수점을 포함시킬 때, 그것은 #로 해석됩니다.


모두 감사합니다! a Schema.ini "프로그래밍 방식으로" KB155512 ONEDAYWHEN우수합니다 게시하다 해결책을 향해 지적했습니다.

.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

비슷한 문제가있는 사람은 한 사람마다 솔루션에 약간의 변형이 있기 때문에 게시물과 의견을 읽도록 권장합니다.

도움이 되었습니까?

해결책

당신은 맞습니다 : 그것은 많은 행을 기반으로 데이터 유형을 추측하고 있습니다. 선택한 데이터 유형에 영향을 줄 수있는 로컬 머신 레지스트리 키가 있습니다. 자세한 내용은 참조하십시오 이 답변.

다른 팁

Excel ISAM 드라이버는 기본적으로 최초의 행을 살펴보고 데이터 유형을 추측합니다. 초기 가정에 맞지 않는 (테이블에) 데이터가 있다면 눈살을 찌푸리고 NULL로 바꿉니다.

당신의 MaxScanRows=0 설정은이 문제의 핵심입니다. 그것은 올바른 일을하는 것처럼 들리지만 (데이터 유형을 사용하기 위해 전체 테이블을 스캔). 그러나 실제로는 그렇지 않습니다.

보다 ONEDAYWHEN자세한 내용에 대한 답변, 첫 번째 정보 KB282263 올바른 조언이 아니 었습니다.

내가 줄 수있는 가장 좋은 조언은 VB6 환경에서 그 일을 중단하는 것입니다. Excel을 열고 Alt+F11을 누르고 VBA IDE를로드하십시오. 코드를 거기에 넣으십시오. 이 환경 내에서 전체 Excel 객체 모델에 액세스 할 수 있습니다.

나는 많은 사람들이 여러 가지 방법으로 Excel과 상호 작용하는 것을 보았고 모두 문제가 있습니다. VBA 매크로 또는 애드 인 메소드를 사용하는 것이 데이터를 얻는 가장 좋은 방법입니다. Microsoft가 TFS와 통합하기 위해 Excel과 프로젝트를 얻는 방법입니다.

때로는이 접근법이 적합하기 위해 프로세스를 조금 다시 생각해야합니다. 예를 들어 스프레드 시트를 사용하는 사용자가 스프레드 시트에서 데이터를 가져 오는 프로세스를 실행하는 대신 스프레드 시트에서 데이터를 밀어내는 매크로를 실행하도록해야 할 수도 있지만 일반적으로 가능합니다.

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