C#을 공부하면서 Excel 파일을 읽고 쓰는 예제에 대해서 보다가 파고 들수록 복잡해서 정리해 둡니다.
먼저 간단하게 C#으로 Excel파일을 접근하는 방식은 크게 아래 두 가지 방식으로 나눌 수 있습니다.
1. Interoperability를 이용
2. OleDB를 이용
첫 번째로 Interoperability에 대해서 설명하자면 COM의 Automation부터 알아야 합니다.
COM은 Component Object Model의 약자로 유용한 Component들을 묶어 언어에 상관없이 사용할 수 있도록 만든 바이너리 인터페이스 표준입니다. 거창하게 들리지만 개발자 입장에서 보면 특정한 규격을 가진 라이브러리입니다. 어쨋든 이 COM이라는 것에 보면 Automation이라는 것이 있는데 이는 일반적인 개념의 업무 프로세스를 자동화하는 것이 아니라 프로그래밍 방식을 통해 하나의 프로그램에서 다른 프로그램을 제어할 수 있도록 해주는 개념입니다. 즉, 사용자가 작성하는 프로그램에서 Excel과 같은 Office 프로그램을 API를 통해 제어할 수 있게 되는 것입니다. Interoperability는 닷넷 프레임워크에서 다른 형식의 라이브러리를 가져다 쓸 수 있도록 해주는 '상호운용'의 개념입니다. 따라서 닷넷 프레임워크의 Interoperability는 COM 라이브러리에 있는 Excel API를 사용할 수 있게 해 주는 기능이죠. 단순하게 생각해 보면 COM API를 닷넷 프레임 워크에서 쓸 수 있도록 Wrapping한 것이죠.
Interoperability의 장점은 엑셀을 제어하기 편하다는 것입니다. 하지만 단점이 심각한데 Office가 설치되어 있어야 한다는 것이죠. 그리고 또 중요한 한 가지는 Office 설치시에 .NET 프로그래밍 지원을 체크해야 한답니다. 기본적으로 선택되어 있지만 고급 설정에서 체크를 안하면 Run Time에 Exception을 발생시킨다고 합니다.
두 번째로 OleDB를 이용한 방식은 정확히 말해서 OleDB와 ADO를 이용한 방식이라 해야 하겠습니다. 여기서도 여러 개념을 먼저 집고 넘거 가야 할 것 같습니다.
우선 OLE에 대해서 보죠. OLE는 Object Linking and Embedding의 약자로서 Compound Document라고 하는 엑셀, 워드와 같은 복잡한? 문서에 여러가지 아이템을 넣을 수 있는 MS의 표준이라고 합니다. 여기서 '여러가지 아이템'이란 스프레드 시트, 클립, 비트맵과 같은 "Object"들을 가리킵니다.
그리고 OleDB와 ADO에 대해서 찾아 보면 OleDB는 단순히 DB를 연결하기 위한 표준이고 이 연결을 이용해 실제로 처리하는 것은 ADO라고 합니다. 사실 OleDB와 ADO를 이용한 방식 역시 COM에도 존재합니다. 이 때문에 전 Interoperability란 용어가 헷갈렷습니다. 이것도 COM에 있는 걸 wrapping해서 쓰는 거면 interoperbility가 아닌가? 그런데 좀 더 생각해 보니 닷넷 프레임워크에서 Wrapping이 아니고 따로 구현한 거라면 interoperability가 아닌 거죠. 즉, COM에 있는 ADO와 ADO.NET은 다른 거라고 생각이 됩니다.
이 방식의 장점은 처리에 있어서 빠르다는 것입니다. 단점은 수정이나 Delete가 지원되지 않는다고 합니다. 따라서 읽을 때만 써야겠네요.
이 방식은 첫 번째와 다르게 엑셀이 없어도 됩니다. 아래 Office system 드라이버'라는 것을 설치해야 합니다.
'2007 Office system 드라이버: 데이터 연결 구성 요소'
http://www.microsoft.com/ko-kr/download/confirmation.aspx?id=23734
Microsoft Visual C# .NET을 통해 Microsoft Excel을 자동화하는 방법
출처. Microsoft 고객지원
http://support.microsoft.com/kb/302084/ko
Visual C#에서 Excel을 자동화하여 배열을 통해 일정 범위의 데이터를 채우거나 가져오는 방법
출처. Microsoft 고객지원
http://support.microsoft.com/kb/302096/ko
C#.net을 사용 하 여 이벤트에 대 한 처리 방법: Excel
출처. Microsoft 고객지원
http://support.microsoft.com/kb/302815/ko