본문 바로가기

카테고리 없음

C#에서 엑셀 파일 읽는 2가지 방식

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