2009-07-07 6 views
4

ADO를 사용하여 Excel 2007 스프레드 시트에서 데이터를 읽습니다. 연결을 설정하는 것은 간단하다ADO를 사용하여 Excel에서 데이터를 읽는 Null 값

Dim ado As ADODB.Connection 
Set ado = CreateObject("ADODB.Connection") 
ado.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myFilename.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" 
ado.Open 

나는이 객체에서 문제없이 ado.OpenSchema를 호출 할 수 있습니다. 그러나 데이터를 쿼리하려고 할 때 :

Dim rs As ADODB.recordSet 
Set rs = ado.Execute("SELECT * FROM [Current Work Load$]") 

나는 단순히 Null로 가득 찬 테이블을 얻습니다.

이것은 Microsoft Support site의 문제로 언급되었지만 위의 코드에서 볼 수있는 것처럼 "가져 오기 모드"를 명시 적으로 사용 설정했습니다 (IMEX=1).

답변

2

Execute 메서드는 동작 쿼리의 경우와 마찬가지로 레코드를 반환하지 않습니다. OpenRecordset 메서드를 사용해 볼 수도 있습니다.

Dim rs As ADODB.recordSet 
Set rs = ado.OpenRecordset("SELECT * FROM [Current Work Load$]") 
1

은 Excel 통합 문서를 읽을 수 있으며 ADO로 실행할 수있는 문제/제한없이 모든 셀에 액세스 할 수 있습니다.

라이브 C# & VB 샘플 here을보고 무료 시험판 here을 다운로드 할 수 있습니다.

면책 조항 : 내가 여기에 ADO 연결 문자열을 발견했습니다

2

하는 SpreadsheetGear LLC는 믿을 수 없을 정도로 까다 롭고 있습니다 소유하고 있습니다. 작동하도록 스프레드 시트를 읽었지만 약간 다른 연결 문자열을 사용했습니다.

공급자 = Microsoft.ACE.OLEDB.12.0; 데이터 원본 = "+ fileName + @"; 확장 속성 = "Excel 12.0; IMEX = 1 ";

(Excel 12.0 선언 이후에 XML이 없습니다.)

+0

또 다른 좋은 리소스는 http://www.connectionstrings.com –

+0

이거나 HDR = NO입니다. 어떤 것이 있는지에 달려있다. –

1

연결 문자열에 IMEX=1을 사용하는 것은 물론 몇 가지 레지스트리 키를 검토해야합니다. 자세한 내용은 this answer on SO을 참조하십시오.

+0

링크가 깨졌습니다. 레지스트리 키 솔루션의 또 다른 소스가 있습니까? – sigil

+0

@sigil : 내가 언급 한 블로그 게시물과 동일한 내용 (의견을 뺀 내용)을 가진 다른 SO 답을 링크로 변경했습니다. – onedaywhen

관련 문제