C#을 사용하여 Excel 문서를 가져올 때 선행 0이 제거되는 것을 방지하는 방법

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

  •  09-06-2019
  •  | 
  •  

문제

문제없이 Excel 파일에 연결하고 읽을 수 있습니다.그러나 앞에 0이 있는 우편번호와 같은 데이터를 가져올 때 Excel이 데이터 유형을 추측하고 프로세스에서 선행 0을 제거하는 것을 방지하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

자동 감지 대신 텍스트 가져오기를 강제로 수행하려면 연결 문자열에 옵션을 설정해야 한다고 생각합니다.

Provider=Microsoft.ACE.OLEDB.12.0;
    Data Source=c:\path\to\myfile.xlsx;
    Extended Properties=\"Excel 12.0 Xml;IMEX=1\";

귀하의 마일리지는 귀하가 설치한 버전에 따라 달라질 수 있습니다.IMEX=1 확장 속성은 Excel에 혼합된 데이터를 텍스트로 처리하도록 지시합니다.

다른 팁

접두사 '

셀 내용 앞에 '를 붙이면 Excel에서 해당 내용을 숫자가 아닌 텍스트로 표시하게 됩니다.'는 Excel에 표시되지 않습니다.

유형을 결정하기 위해 열을 읽을 때 Excel이 처음 8개 행 이상을 읽도록 강제할 수 있는 레지스트리 해킹이 있습니다.

변화

HKLM\Software\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows 

모든 행을 읽으려면 0이 되고, 해당 행 수로 설정하려면 다른 숫자가 됩니다.

이것이 약간의 성능 저하를 가져오는 것은 아닙니다.

이를 수행하는 방법은 열이 일반 대신 텍스트 형식으로 지정되도록 소스 Excel 파일의 형식을 지정하는 것입니다.전체 열을 선택하고 마우스 오른쪽 버튼을 클릭하여 셀 서식을 선택하고 옵션 목록에서 텍스트를 선택합니다.

나는 그것이 열 내용이 텍스트이고 그렇게 처리되어야 함을 명시적으로 정의한다고 생각합니다.

효과가 있는지 알려주세요.

파일을 탭으로 구분된 텍스트 파일로 저장하는 것도 잘 작동했습니다.

--- 불행히도, 우리는 사용자가 정기적으로 데이터를 붙여 넣기 때문에 Excel Doc의 열에 의존 할 수 없습니다.열에 대해 특정 데이터 유형을 사용하는 경우 앱이 충돌하는 것을 원하지 않습니다.

'로 접두사를 붙이면 작동합니다. Excel 문서에 데이터가 이미 존재하면 프로그래밍 방식으로 이를 수행할 수 있는 합리적인 방법이 있습니까?

보내는 가치 00022556 ~처럼 '=" 00022556"' SQL 서버에서 선행 제로 문제를 처리하는 훌륭한 방법입니다.

문자열 앞에 " "를 추가하세요.문자열이 새 탭에 표시됩니다.

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