native excel format 을 지원하는 클래스입니다.
ms에서 배포하는 라이브러리 형태는 아니지만 코드프로젝트를 검색하다가 괜찮은 클래스가 있어 포스팅합니다.

얼마전 프로젝트를 진행하면서 Excel파일을 파싱해서 분석하고 데이터베이스에 업데이트 하는 모듈을 제작한적이 있었는데 대부분 Excel에 접근할 때는 ODBC 등과 같은 드라이버가 필요하거나 Automation 등을 쓸때는 버전등의 종속문제가 있어(뭐 최상위버전의 라이브러리를 링크한다면 상관없겠지만..) 개발 후에 배포하는데도 문제가 많았습니다.

BasicExcel은 파일을 파싱하는데 어떠한 dependency도 걸려있지 않고 클래스 사용방법도 어렵지 않아서 쉽게 개발했던걸로 기억합니다. 개발당시 개발환경은 Windows XP professional sp3 OS에 VS2008 환경이었고 MS 오피스는 설치되지 않았었습니다. 즉 구현단계에서나 배포단계에서 MS 제품군에 종속되지 않고 구현할 수 있었던게 강점이었던것 같구요..

다만 아쉬웠던것은 BasixExcel로 파일을 파싱할때는 MS제품군이 아닌 엑셀Sheet를 지원하는 다른 소프트웨어(OpenOffice 등등)로 저장된 엑셀파일은 읽다가 어플리케이션이 다운된다는게 아쉽더군요.
그러나 엑셀파일이야 제작당시 제작자가 MS 오피스 말고 다른걸 쓸일은 없을 거고..엑셀파일만 제대로 제작된다면 어플리케이션 실행은 어디에서 해도 상관없었습니다.
초기 엑셀파일만 MS제품군으로 저장한 파일이라면 상관없었고..혹시나 csv나 다른 엑셀sheet형태로 저장된 파일을 사용해야 한다면 MS Excel로 오픈해서 MS Excel형태로 다시저장해서 사용하면 문제없이 작동했었습니다. 다시말해서 대상파일만 MS 제품군으로 저장한 엑셀파일이라면(버전에 관계없이..) 사용하는데 문제 없었습니다.
BasicExcel 내부에서 Sheet데이터를 파싱하는데 MS제품군의 무언가를 사용하는 모양입니다. 그 무언가는 저도 모르겠습니다만..;;

또한 주의해야 할 점은..
엑셀파일이 한글파일명일 경우인데..VS6.0 에서의 멀티바이트 환경이나 닷넷 계열의 문자집합 사용안함 옵션으로 실행하면 상관없습니다만 유니코드 환경일때는 약간의 클래스 내부 수정을 해주어야 합니다.
클래스 제작자가 국내사람이 아니다보니 한글 유니코드까지는 신경 안쓴 모양인데..
영문이나 숫자조합으로 된 유니코드 문자열 파일이름은 문제없이 읽어들여 파싱합니다만 한글 유니코드 문자열일 경우에 클래스 내부에 약간의 수정을 해주어야 합니다.

 

 

사용법은 어렵지 않았습니다.
몇가지 인터페이스만 이해하면 어렵지 않게 엑셀파일을 읽고 쓰고 저장이 가능합니다.

파일을 직접 접근하는 Load 함수의 파라미터는 char* 형태의 문자열만 가능하며 유니코드 환경일경우 멀티바이트 형태로 변환해야 합니다. 그리고 파라미터로 입력되는 파일명은 파일의 전체경로가 아닌 파일명만을 입력하고 BasicExcel에서는 현재 설정된 디렉토리(기본적으로 Application이 실행되는 위치)내에서 파일명을 검색하므로 특정 디렉토리내의 파일을 열고자 할때는 SetCurrentDirectory 와 같은 API함수를 통해 현재 디렉토리를 설정하고 파일을 검색해야 합니다.
또한 Load 함수가 실패날 경우는 파일이 존재하지 않거나 해당파일이 다른 소프트웨어를 통해 열려있는 상태에서는 Load 함수가 실패나게 됩니다.

 

Load 속도는 엑셀 행이 약 4~5000 개 이상일 경우 약간의 딜레이가 생기긴 하지만 문제될 만큼의 딜레이는 아닌듯..


더 자세한 사용법 및 원본 소스코드 정보는 아래 링크로..

코드프로젝트 원문정보..
http://www.codeproject.com/KB/office/BasicExcel.aspx

Posted by 루시엔시엘
TAG , ,

댓글을 달아 주세요

  1. kkhawn 2012.05.10 02:18  댓글주소  수정/삭제  댓글쓰기

    잘 보고 갑니다. 덕분에 학교 과제 해결하기가 쉬워졌네요

    한글, 유니코드 관련 지식이 전혀없었는데 감사 합니다.

    맨날 영어만 사용하니 이런쪽은 생각도 못했었네요.....

    그런데요.....로드할때는 한글 파일명도 로드가 되던데요......반대로

    저장할때도 한글 파일명이 저장될수 있게 할려면 어느 부분을 고쳐야 하나요......

    좀 가르쳐 주시면 안될까요 ㅠㅠ kkhawn@gmail.com

  2. myongjune 2012.11.23 11:57  댓글주소  수정/삭제  댓글쓰기

    잘봤습니다 덕분에 공부가 많이 되었습니다.

    코드를 받고 한번 실행을 해보았는데 저는 자꾸 링크문제로 애를 먹고있습니다..ㅠㅜ..

    이 문제는 어떻게 해결해야 되나요??