반응형

엑셀에서 VBA 로 코드를 짜다 보면 막상 특정 엑셀 파일에만 VBA 가 적용이 가능하기 때문에 막상 다른 엑셀 파일에서 동일한 동작을 하려면 또 코드를 복사해 넣고 실행을 해야 하는 경우가 있습니다. 이런 경우 중간에 어느 버전에서인가 코드가 업데이트 되기도 하지만 관리하기가 어렵기 때문에 소실되는 경우도 많습니다. 또한 포멧을 중간에 xlsx 로 저장하는 순간 VBA 코드는 모두 사라져 버리죠.

그래서 외부 툴에서 VBA 로 만들었던 것과 같이 엑셀의 자동화 기능을 지원해주면 어떨까 생각해 보았습니다.

그래서 이번 포스트에서는 빠르고 코딩이 간편한 C# 을 이용하여 한번 엑셀 프로그램과 연동하는 내용을 설명해 드릴까 합니다. 

C# 으로 엑셀을 연동한다고?

당연히 비주얼 스튜디오와 엑셀은 설치가 되어 있다고 보고 시작하겠습니다.

 

 

 

연동 대상이 될 엑셀 파일 만들기

엑셀을 열고 창을 하나 만든 뒤 기본적으로 붙어 나오는 이름인 "통합 문서 1.xlsx" 로 저장을 해 놓겠습니다.

아마 기본적으로 worksheet 가 하나 있는 상태일 겁니다. 아래 처럼요.

엑셀에 파일을 하나 생성(저장)한 상태

 

 

 

 

.NET Window Forms 생성하기

비주얼 스튜디오를 실행합니다.

먼저 C# Window Forms App 프로젝트를 하나 생성합니다.

비주얼 스튜디오 버전마다 약간씩 차이는 있지만 필요한 항목을 보고 선택하면 됨

 

그런다음 프로젝트 명칭과 저장될 경로를 지정한뒤 "만들기" 버튼을 눌러 프로젝트를 생성해 줍니다.

.NET 버전은 적당히 4.5.1 을 선택하였다

 

이렇게 빈 화면의 윈도우 폼이 하나 만들어 집니다.

Window Form 이 만들어진 상태

간단하게 버튼하나와 텍스트에디터 창을 만들어 주고 상단의 Form1 이라고 써있는 글자 부분을 더블클릭해서 Form 이 로딩될때 실행할 함수를 하나 선언해 줍니다.

만들어진 버튼도 더블클릭해서 버튼이 눌릴때 실행할 함수를 만들어 줍니다.

 

그럼 지금부터 만들 C# App 에서 엑셀에 열려있는 파일 명을 한번 가져와 보도록 하겠습니다.

 

 

 

엑셀 COM 레퍼런스 추가하기

일단 C# 에서 엑셀 연동을 하기 위하여는 참조 개체를 추가해야 합니다. 

상단 메뉴의 "프로젝트" -> "참조" 로 이동하신 다음 아래와 같은 항목을 찾아서 체크해 줍니다.

앞쪽의 체크박스를 선택해주고 확인 버튼을 눌러주면 된다.

 

확인을 누르셨으면 이제 해당 레퍼런스를 사용하도록 선언을 해줍니다.

코드 페이지의 제일 윗 부분에 아래와 같이 작성을 해 주겠습니다.

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using Application = Microsoft.Office.Interop.Excel.Application;

두번째 추가한 구문은 현재 열려있는 엑셀 어플리케이션을 확인하기 위한 용도로 사용합니다.

세번쨰 구문은 이후 사용할 Application 이라는 지시어가 현재 C# 컴파일러가 헷깔릴수 있는 용어이기 때문에 특별히 어떤 녀석인지를 지시하도록 작성하였습니다.

 

 

 

엑셀 연동을 하는 실제 코드 작성하기

이제 사용할 준비는 되었고 코드를 작성해 보겠습니다.

아래와 같이 작성이 되면 됩니다. 본인의 비주얼 스튜디오에 복붙 하지 마시고 한번 타이핑 해보시기 바랍니다. 코딩의 재미중에 타이핑 하는 맛도 빼 놓을 수 없기 때문이며 직접 타이핑을 해보는게 좀더 빠르게 익숙해 지기 때문이기도 하죠. 물론 인텔리센스가 도와주기 때문에 사실 몇글자 씩만 적어도 아래에 적어야 될 코드들이 자동으로 나타나서 저처럼 영문 타이핑을 못하는 사람도 쉽게 코딩을 할 수 있습니다.

한번 코드를 보실까요? 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using Application = Microsoft.Office.Interop.Excel.Application;

namespace excelAutomate
{
    public partial class Form1 : Form
    {
        private Application xlsApp;


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 폼 로딩시에 위에서 정의한 xls App 를 엑셀과 연동해 주겠습니다.
            xlsApp = (Application)Marshal.GetActiveObject("Excel.Application"); // 현재  열려있는 엑셀 어플리케이션이 지정됩니다.
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 버튼을 누르면 텍스트 박스에 엑셀 어플리케이션이 열고 있는 엑셀 파일 명을 표시해 보겠습니다.
            textBox1.Text = xlsApp.ActiveWorkbook.Name;
        }
    }
}

 

실제로 제가 타이핑 한 내용은 세 줄 밖에 없습니다. ㅎㅎ 나머지는 자동으로 다 만들어진 코드들 이고요. 똑같이 따라 하셨다면 아마 비슷할 겁니다.

 

 

 

동작 확인해 보기

이렇게 하고 F5 키를 눌러 실행을 해보면 아래와 같은 창이 나타납니다.

버튼을 누르면 우측의 텍스트 창에 엑셀 파일명이 나오게 된다

 

그럼 한번 버튼을 눌러 볼까요?

현재 열려 있는 엑셀 파일명이 출력되었다.

요렇게 현재 엑셀 파일의 이름이 나타나게 됩니다.

엑셀 파일 이름을 "통합 문서3.xlsx" 로 저장한뒤 다시 한번해보면 ?

테스트를 위하여 엑셀 파일명을 변경해서 실행해 보았다.

요렇게 표시가 됩니다.

 

참 쉽지 않습니까?

 

이런식으로 C# 을 이용해서 현재 열려 있는 엑셀 어플리케이션과 연동이 가능하게 되었습니다.

다음 강좌에서는 각 시트에 접근하는 방법과 통합문서가 여러개 열려있는 경우 각각에 대하여도 연결하는 방법을 알아보도록 하겠습니다.

 

감사합니다.

 

2020/06/03 - [DEV/c#] - C# .net으로 photoshop 연동하기

 

C# .net으로 photoshop 연동하기

저는 회사에서 디자인팀에 있고 전공도 디자인과 출신이며 심지어는 고등학교도 예체능계열 고등학교를 나왔습니다만 지금 회사에서 하는일의 95% 정도는 개발을 하고 있습니다. 실제로 제가 ��

diy-dev-design.tistory.com

2020/05/28 - [DEV/c#] - [c#] 주어진 경로가 디렉토리인지 파일인지 확인하는 방법

 

[c#] 주어진 경로가 디렉토리인지 파일인지 확인하는 방법

오늘은 간단하게 주어진 경로가 폴더인지 파일인지 구분하는 방법을 소개해 드리겠습니다. 길게 설명할 것 없이 간단하게 코드나갑니다. FileAttributes chkAtt = File.GetAttributes(_path); if ((chkAtt & FileA..

diy-dev-design.tistory.com

2019/06/21 - [DEV/c#] - [C#] C# .NET 프로젝트에서 ImageMagick 이용하기

 

[C#] C# .NET 프로젝트에서 ImageMagick 이용하기

이미지 관련된 툴을 개발함에 있어 다양한 이미지 포멧을 만들고 변경하기 위한 코어를 개발하는 것은 말도 안되게 힘든 작업입니다. 저는 디자이너라는 타이틀을 가지고 있기 때문에 포토샵이

diy-dev-design.tistory.com

2019/06/21 - [DEV/c#] - [C#] 마우스 매크로를 위한 마우스 자동 클릭 기능 만들기

 

[C#] 마우스 매크로를 위한 마우스 자동 클릭 기능 만들기

사용자의 마우스 컨트롤 없이 자동으로 지정된 위치에서 마우스를 클릭하게 만들어 주는 기능 입니다. 먼저 아래와 같이 DLL 을 불러들여 주어야 하겠습니다. class 정의 바로 아래부분에 넣어 주�

diy-dev-design.tistory.com

 

반응형

+ Recent posts