문제

OLEDBCONNECTION 클래스를 사용하여 Excel 2000/2003 통합 문서에서 데이터를 검색합니다.

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                          "Data Source=" + filename + ";" +
                          "Extended Properties=\"Excel 8.0;IMEX=1\";";

OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();

// code to get table name from schema omitted

var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection);
var myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "ExcelInfo");

이제 255 자 이상의 길이가있는 워크 시트의 셀이 잘린 것으로 나타났습니다. 이것이 Microsoft.jet.oledb-provider의 한계입니까, 아니면 내가 할 수있는 일이 있습니까?

누구나?

도움이 되었습니까?

해결책

Excel의 OLEDB 제공 업체는 처음 8 행의 데이터를 기반으로 데이터 유형을 자동으로 결정하려고 시도합니다. 이는 연결 문자열의 HDR = 예/아니오 속성으로 설정할 수 있습니다. 또한 텍스트 열에 적용 할 수있는 여러 유형이 있습니다. 메모 유형은 255자가 넘는 문자를 유지하므로 처음 8 행 중 어느 것도 없으면 데이터 유형이 잘못 설정됩니다.

이것을 변경하는 방법은 여기에 설명 된대로 TypeGuessrows라는 레지스트리 설정을 변경하는 것입니다. 마이크로 소프트 지원

참고 : TypeGuessrows 키의 유효한 값 범위는 0 ~ 16입니다. 그러나 값이 0이면 스캔 한 소스 행의 수는 16384입니다. 따라서 파일이 매우 큰 경우 가장 큰 행이 먼저 있는지 확인하십시오.

다른 팁

이 시도 Oledbadapter Excel QA 스택 오버플로를 통해 게시했습니다.

나는 워크 시트 셀을 채웠다 (445자가있는 행 [0] [4])가 잘 작동했다.

// DataSet:          
Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2];
Object row0Col4 = ds.Tables["xlsImport"].Rows[0][4];

string rowZeroColumn3 = row0Col3.ToString();
string rowZeroColumn4 = row0Col4.ToString();

Console.WriteLine("Row 0, Col 4 string length: {0} " + Environment.NewLine + "Excel content: {1}", rowZeroColumn4.Length, rowZeroColumn4);           
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top