.NET에서 Excel 파일 읽기. 특히 구버전(97-2003)의 포맷일 경우.

  • NPOI 라이브러리 이용. Thanks to 안홍조 & 정세일.
  • CSV 포맷으로 올려서 읽는다.
  • ODBC 드라이버를 설치해서 읽는다. ODBC 연결 문자열
  • 2003 이전 구포맷일 경우 상용컴포넌트 사용
  • 2007 이후 버전(Open XML Format) 일 경우 EPPlus, ClosedXmlNPOI 등등 매우 많은 오픈소스 프로젝트가 있다.
  • Sql Server의 SQL Server Integration Services(혹은 DTS) 를 이용한다. 이 방법을 이용하려면, SSIS를 설치해서, DTS 패키지를 만든 후에, 이 DTS 패키지를 Job스케쥴러에 등록해서, Job을 실행시키면 된다. 단 SSIS가 설치된 컴퓨터에서 파일을 읽을 수 있어야 하고, 읽은 파일을 바로 DB의 테이블로 Export 시키기 위해서는 SQL Server의 계정이 sysadmin 서버역할이 부여되야 한다.

서버에 Excel을 직접 설치해서 COM을 이용해 읽는 것은 안 된다. Excel 프로그램이 무인실행을 위해 만들어진 프로그램이 아니기 때문에, 읽은 파일을 못 닫거나, 메모리 누수와 같은 문제가 발생할 수 있다.

구버전 파일의 경우 현실적으로 StackOverflow에서처럼 ODBC 드라이버가 대세이지만, 
ODBC를 이용해 읽는 방법은 32/64bit OS에 따라 다른 드라이버를 설치해야 하고, ODBC 드라이버에서 각 컬럼의 데이타 타입을 유추할 때, 첫 몇 줄을 이용해서 판단하는데 조금 문제가 있다. 특히 셀 값을 텍스트로 입력하지 않으면(셀값의 앞에 apostrophe '를 붙히지 않으면)
  • 포맷은 숫자지만 실제로는 텍스트 인데, 읽으면 숫자로 인식해버린다. 예를 들어 00033223 가 33223으로 읽히거나, 
  • 매우 긴 숫자면 Single/Double 타입으로 인식해버린다. 123456678665 가 12.34e5 뭐 이런 식으로.

구버전일 경우 가장 확실한 방법은
  • NPOI 이용
  • CSV으로 변환된 파일을 파싱하거나 CSV를 읽을 수 있는 라이브러리 이용.
  • 상용컴포넌트를 이용.
  • SSIS(엑셀 -> 테이블 일 경우).
참고로 흥미로운 방법이 하나 더 있는데, SkyDrive에 엑셀 파일을 올려서, 읽는 방법이 있다. 구버전 포맷일 경우에도 당연히 될 것으로 예상. 어차피 자기들은 구/신 파일 포맷을 다 읽을 수 있으니깐. 자세한 것은 검색 ㄱㄱ.

댓글

  1. 좋은 정보 감사합니다. ^-^

    답글삭제
  2. NPOI 라는 라이브러리가 있습니다. 아파치 라이센스로 이미 안정적으로 구현되어 널리 사용하고 있는 POI의 .NET 버젼입니다.
    xlsx도 잘 읽어주네요.. 단 xlsx읽기는 epplus보다는 많이 느립니다.

    답글삭제
  3. NPOI는 OLE2 뭐 어쩌고 저쩌고를 이용해서 구버전도 읽을 수 있네요. 미처 몰랐네요.

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

Oracle NLS_DATE_FORMAT 변경

Stop console process using Ctrl+C.

Alternative to IValueConvert, QuickConverter