C#에서 Excel 파일을 구문 분석하면 셀은 255 자로 잘린 것 같습니다. 어떻게 멈추나요?

StackOverflow https://stackoverflow.com/questions/926453

문제

ASP.NET의 업로드 된 Excel 파일 (XLSX)을 C#로 구문 분석하고 있습니다. 다음 코드 (단순화)를 사용하고 있습니다.

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connString);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.Dispose();
DataTable dt = ds.Tables[0];
var rows = from p in dt.AsEnumerable() select new { desc = p[2] };

이것은 완벽하게 작동합니다. 하지만 셀에 255 자 미만의 문자가 있으면 끊어집니다. 내가 뭘 잘못하고 있는지 아십니까? 고맙습니다.

편집 : Excel 시트를 볼 때 255 자 이상이 표시되므로 시트 자체가 제한되어 있다고 생각하지 않습니다.

도움이 되었습니까?

해결책

주제의 빠른 인터넷 검색으로부터, 그것은 Excel의 한계 인 것으로 보입니다.

편집하다: 가능한 해결 방법 (불행히도 VB)

다른 팁

해결책!

나는 오늘 이것도 싸우고있다. Excel 스프레드 시트를 구문 분석하기 전에 레지스트리 키를 수정하여 마침내 작동하게되었습니다.

Excel 스프레드 시트를 구문 분석하기 전에이 레지스트리 키를 업데이트해야합니다.

// Excel 2010
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
or
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\

// Excel 2007
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\

// Excel 2003
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\

변화 TypeGuessRows 에게 0 그리고 ImportMixedTypes 에게 Text 이 키 아래. 또한 포함하려면 연결 문자열을 업데이트해야합니다. IMEX=1 확장 속성에서 :

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");

참조

http://blogs.vertigo.com/personal/aanttila/blog/archive/2008/03/28/excel-and-csv-reference.aspx

http://msdn.microsoft.com/en-us/library/ms141683.aspx

... 캐릭터가 잘릴 수 있습니다. 자르기가없는 메모 열에서 데이터를 가져 오려면 샘플링 된 행 중 하나 이상의 메모 열에 255 자 이상의 값이 포함되어 있는지 확인해야합니다. 열. hkey_local_machine Software Microsoft Jet 4.0 Engines Excel Registry 키 ....

나는 이것을 발견했고, 저를 위해 일한 솔루션은 긴 텍스트로 셀을 스프레드 시트 상단으로 옮기는 것이 었습니다.

문제를 설명하는 포럼 에서이 의견을 찾았습니다.

이것은 Jet OLEDB 제공 업체의 문제입니다. 첫 번째를 본다 8 줄
각 열의 데이터 유형을 결정하기위한 스프레드 시트의 열이 수행되는 경우
첫 번째에는 256 자 이상의 필드 값을 포함하지 않습니다. 8 줄, 그것은 그것을 가정합니다
데이터 유형은 문자 제한이 256 인 텍스트입니다. 다음 KB 기사는 다음과 같습니다.
이 문제에 대한 자세한 정보 : http://support.microsoft.com/kb/281517

이것이 다른 사람을 도울 수 있기를 바랍니다!

스프레드 시트 내에서 열 데이터 타입을 텍스트로 설정해 보셨습니까? 이렇게하면 셀이 255 자 이상을 포함 할 수 있다고 생각합니다.

편집] 가치가있는 것 이 대화 상자 MS-Excel 팀은 흥미로운 읽기입니다. 하단의 의견 섹션에서 그들은 255 컷오프에 대한 논의를 시작합니다. 그들은 Excel 12가 셀당 32k 문자를 지원할 수 있다고 말합니다.

그것이 사실이라면이 데이터를 얻는 방법이 있어야합니다. 고려해야 할 두 가지가 있습니다.

  1. 과거에는 연결 문자열에서 "imex = 1"옵션을 사용하여 비어있는 것으로 표시되는 혼합 데이터가 포함 된 열을 처리했습니다. 그것은 장거리이지만, 당신은 그것을 시도 할 수 있습니다.

  2. 파일을 탭으로 구분 된 플랫 파일로 내보낼 수 있습니까? IMHO Excel에는 너무 많은 gotchas가 있기 때문에 이것은 Excel 데이터를 처리하는 가장 신뢰할 수있는 방법입니다.

.NET 용 스프레드 시트 기어 XLS 및 XLSX 통합 문서를 읽고 쓰고 쓸 수 있으며 텍스트의 Excel과 동일한 제한 사항을 지원합니다. 즉, 단지 작동합니다. 시도해 보려면 무료 평가가 있습니다.

면책 조항 : 스프레드 시트 기어 LLC를 소유하고 있습니다

마지막 게시물과 관련하여 스프레드 시트 기어를 사용하여 이전 XLS (XLSX가 아님) 형식을 읽을 때 셀 제한 당 255 자로 고통 받고 있음을 알게됩니다.

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