programing

C#에서 Excel 파일을 구문 분석하면 셀이 255자로 잘리는 것 같습니다...어떻게 그것을 멈출 수 있습니까?

lovejava 2023. 6. 28. 21:13

C#에서 Excel 파일을 구문 분석하면 셀이 255자로 잘리는 것 같습니다...어떻게 그것을 멈출 수 있습니까?

저는 asp.net 에 업로드된 엑셀 파일(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자보다 긴 것이 있으면 끊어집니다.내가 뭘 잘못하고 있는지 알아요?감사해요.

편집: 엑셀 시트를 볼 때 255자가 훨씬 넘는 글자를 보여주기 때문에 시트 자체가 제한적이라고 생각하지 않습니다.

해결책!

저는 오늘도 이것과 싸우고 있습니다.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\

TypeGuessRows0그리고.ImportMixedTypesText이열또한로쇠포함록연결문도업합데니야다해트이을자열하다를 포함하도록 연결 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\에서 TypeGuesRows 값을 증가시켜 샘플링된 행 수를 늘릴 수 있습니다.제트\4.0\엔진\Excel 레지스트리 키...

저는 이것을 접했고, 제게 효과적인 해결책은 긴 텍스트가 있는 셀을 스프레드시트의 맨 위로 옮기는 것이었습니다.

저는 이 문제를 설명하는 포럼에서 이 의견을 발견했습니다.

이것은 Jet OLEDB 공급자의 문제입니다.처음 8개의 행을 봅니다.
각 열의 데이터 유형을 결정하는 스프레드시트입니다.열이 다음과 같은 경우
처음 8개 행에 256자 이상의 필드 값이 포함되지 않은 경우, 다음과 같이 가정합니다.
데이터 유형은 문자 제한이 256인 텍스트입니다.는 ""KB"입니다.
이 문제에 대한 추가 정보: http://support.microsoft.com/kb/281517

이것이 다른 사람에게 도움이 되기를 바랍니다!

열 데이터 유형을 스프레드시트 내의 텍스트로 설정해 보셨습니까?이렇게 하면 셀이 255자를 훨씬 초과할 수 있습니다.

[편집] MS-Excel 팀과의 이 대화는 흥미로운 읽을거리입니다.하단의 설명 섹션에서 255 컷오프에 대한 몇 가지 논의를 진행합니다.엑셀 12는 셀당 32,000자를 지원할 수 있다고 합니다.

그것이 사실이라면 이 데이터를 얻을 수 있는 방법이 있을 것입니다.여기 고려해야 할 두 가지가 있습니다.

  1. 이전에는 연결 문자열에서 "IMEX=1" 옵션을 사용하여 혼합 데이터가 들어 있는 열이 비어 있는 것으로 표시되는 경우를 처리했습니다.가능성은 희박하지만, 한 번 시도해 보세요.

  2. 탭으로 구분된 플랫 파일로 파일을 내보낼 수 있습니까?IMHO 이것은 엑셀 데이터를 다루는 가장 신뢰할 수 있는 방법입니다. 엑셀은 많은 gotchas를 가지고 있기 때문입니다.

주제를 빠르게 검색해보니, 그것이 엑셀의 한계인 것 같습니다.

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

.NET용 스프레드시트Gear는 xls 및 xlsx 워크북을 더 많이 읽고 쓸 수 있으며 텍스트의 경우 Excel과 동일한 제한을 지원합니다. 즉, 작동합니다.당신이 한번 해보고 싶다면 무료 평가가 있습니다.

고지 사항:스프레드시트Gear LLC 소유

마지막 게시물과 관련하여, 저는 또한 스프레드시트기어를 사용하고 있으며 이전 XLS(XLSX가 아님) 형식에서 읽을 때 셀당 255자 제한으로 인해 어려움을 겪고 있다는 것을 발견했습니다.

언급URL : https://stackoverflow.com/questions/926453/parsing-an-excel-file-in-c-the-cells-seem-to-get-cut-off-at-255-characters