2016-11-24 5 views
2

System.Data.OleDb을 사용하여 매우 큰 텍스트 셀 (약 8900 문자)이있는 .xls 파일을 읽으려고합니다. Microsoft ACE OLEDB 공급자. .xls 파일의 내용을 제어 할 권한이 없습니다.ACE OLEDB Excel 테이블에 큰 텍스트가있는 "외부 테이블이 예상 된 형식이 아닙니다"

Exception thrown: 'System.Data.OleDb.OleDbException' in System.Data.dll 

Additional information: External table is not in the expected format. 

나는 .xls 파일을 최소화하고 텍스트 셀이 예외의 원인을 것 같다 : .Open()OleDbConnection 할 때

나는 다음과 같은 예외를 얻을. x64 OS에 MS Office 2010 x86이 설치되어 있습니다.

가 나는 다음의 모든 시도 한 것도있는 문제를 해결하지 :

  • ACE 12.0 86
  • ACE 12.0 64
  • ACE 15.0 X32 설정
  • 레지스트리 팅겨 TypeGuessRows = 0
  • 연결 문자열 IMEX = 1
  • 연결 문자열 확장 속성 = "Excel 8.0;"
  • 연결 문자열 확장 속성 = "Excel 12.0;"

내 연구 결과에 따르면 이전 JET 공급자가 255 자로 필드를 자르는 데 사용 된 것 같습니다. 나는 예외를 던지지 않고 ACE가 파일을 읽도록 할 수 없다.

+0

예외는 .NET 응용 프로그램에서이 작업을 수행하려고 시도하는 것입니다. 그렇다면'C#','VB.NET' 등으로 질문을 태그하면 더 나은 도움을 얻을 수 있습니다. 즉, C#에서 문제를 재현 할 수 없습니다. 오류를 보여줄 작은 샘플 .xls 파일에 대한 링크를 제공 할 수 있습니까? –

+0

예, C#. 샘플을 https://dropfile.to/EZmAt3K에 업로드했습니다. – CoderBrien

+0

Excel에서 데이터 탭> 액세스> 엑셀 파일> 등을 선택한 다음 속성에서 생성 된 연결 문자열을 확인할 수 있습니다. 그렇지 않으면 ODBC 드라이버 중 일부를 시도 할 수 있습니다. https://www.connectionstrings.com/excel-2007-odbc/ – Slai

답변

2

이전 .xls 파일에 대한 Access 데이터베이스 엔진 ("ACE") 처리 문제가있는 것 같습니다. 나는

myConnectionString = 
     "Provider=Microsoft.ACE.OLEDB.12.0;" + 
     @"Data Source=C:\Users\Public\test\sample.xls;" + 
     "Extended Properties=\"Excel 8.0;HDR=YES;\";" + 
     ""; 

를 사용하여 문제를 재현 할 수 있지만 단순히 나이가 "제트"OLEDB 공급자 (32 비트)로 전환 할 때 오류가 발생하지 ...

myConnectionString = 
     "Provider=Microsoft.Jet.OLEDB.4.0;" + 
     @"Data Source=C:\Users\Public\test\sample.xls;" + 
     "Extended Properties=\"Excel 8.0;HDR=YES;\";" + 
     ""; 

... 그리고 그것은 "Legal"열의 모든 8927자를 읽었습니다 (즉, 255 자로 자르지 않았습니다).

당신이 정말로 ACE OLEDB 공급자를 사용해야 않은 경우

는 내가 .XLSX로 .xls 파일을 저장하고 사용하는
myConnectionString = 
     "Provider=Microsoft.ACE.OLEDB.12.0;" + 
     @"Data Source=C:\Users\Public\test\sample2.xlsx;" + 
     "Extended Properties=\"Excel 12.0;HDR=YES;\";" + 
     ""; 

도 일 것을 발견했다. (아마도 C# 응용 프로그램 내에서 Excel의 COM 자동화를 사용하여 다시 저장할 수 있습니다.)

+0

안녕 Gord. 너 다 남자 야! ACE의 버그와 해결 방법을 확인해 주셔서 감사합니다. 나는 내 사무실을 쓰러 뜨 렸는데 ACE15를 제거하려고 설치했다 .-(. 다음에 따라 오는 사람은 모두 ExcelDataReader 프로젝트에도 사진을 찍을 것이다. 고마워! – CoderBrien

+0

잘 고맙습니다. 감사합니다. –