엑셀 Addin 커스텀 메뉴 추가
엑셀에 커스텀 메뉴 추가
Excel Addin 으로 엑셀 기능을 확장하는 기능의 하나로 엑셀에 Custom 메뉴 (사용자 정의 메뉴)를 추가할 수 있다.
예를 들어, 아래 그림은 엑셀 메인 메뉴에 "My Cloud" 라는 사용자 정의 메뉴를 추가한 것이다.
참고로 아래 그림과 같은 스타일의 메뉴를 리본(Ribbon) 메뉴라 한다.
엑셀 Add-in 작성
엑셀 Addin으로 사용자 정의 커스텀 메뉴를 추가하는 절차는 다음과 같다.
- Visual Studio를 실행하여 새 VSTO Excel Add-ins 프로젝트를 생성한다.
(File => New Project => Visual C# => Office/Sharepoint => VSTO Add-ins => Excel 2013 and 2016
VSTO Add-in 선택)
-
엑셀 Addin에서 Ribbon을 생성하기 위해서는 Project 메뉴 => Add New Item 에서 “Ribbon (Visual Designer)” 를 선택한다.
(파일명은 임의로 MyRibbon.cs 라고 정함)
-
리본(Ribbon) 디자이너는 기본적으로 File 탭과 TabAddin (Built-In) 탭을 표시하고, TabAddin (Built-In) 안에
group1이라는 빈 리본 그룹을 표시한다. 리본은 리본 탭(Tab) 안에 여러 리본 그룹을 가질 수 있고,
리본 그룹 안에는 여러 컨트롤들을 배치할 수 있다. TabAddin (Built-In) 탭은 엑셀 메인 메뉴 중 Add-ins 메뉴를
가리키는 것으로 디폴트로 그 안에 커스텀 리본 그룹을 작성하게 되어 있다.
만약 별도의 독립된 메뉴를 작성하려면, 상단에서 RightClick을 눌려 컨텍스트 메뉴 중 [Add Ribbon Tab] 을 선택하면 된다.
이 경우 TabAddin (Built-In) 탭 우측에 새 Tab이 생성되는데, 여기에 리본 그룹을 넣으면 된다.
별도의 Tab을 만든 경우 TabAddin (Built-In) 탭에 생성된 리본 그룹을 Cut / Paste로 옮겨 올 수도 있고,
만약 여러 개의 리본 그룹을 만들기 위해서는 리본 그룹을 Copy / Paste 하여 복제할 수 있다.
아래 그림은 별도의 My Cloud 탭을 만들고, 그 안에 2개의 리본 그룹 (즉, Login to myCloud 그룹 와 Save /Open 그룹)과
각 리본 그룹당 2개의 Button 컨트롤을 추가한 예이다.
버튼을 크게 보이게 하기 위해 각 버튼의 ControlSize 속성을 RibbonControlSizeLarge으로 설정하였고,
버튼에 넣은 이미지 파일들은 속성창에서 [Build Action]을 [Embedded Resource]로 설정하였다.
-
리본(Ribbon) 디자이너에서 버튼을 더블클릭하면 버튼클릭 이벤트핸들러가 MyRibbon.cs에 자동 추가된다.
아래 예제는 세번째 Upload 버튼의 이벤트핸들러를 사용하여 가상의 업로드 기능을 추가해 본 것이다.
클라우드 업로드는 통상 HTTP 혹은 Web API 호출을 통해 진행되는데, 여기서는 간단히
현재 Excel 내용을 \\MyCloud\Share 폴더에 저장하는 코드로 작성하였다.
private void btnUpload_Click(object sender, RibbonControlEventArgs e)
{
var wb = Globals.ThisAddIn.Application.ActiveWorkbook;
string xlfile = Path.Combine(@"\\MyCloud\Share", wb.Name + ".xlsx");
wb.SaveCopyAs(xlfile);
MessageBox.Show("Saved to " + xlfile);
}
엑셀 Addin에서 엑셀의 전역 객체를 엑세스할 때는 "Globals" 클래스를 사용한다.
이 Globals 클래스는 ThisAddin, Ribbons, CustomTaskPanes 등과 같은 속성을 제공하고 있어서
해당 객체들을 Addin 어느 곳에서든 엑세스할 수 있게 한다.
Globals.ThisAddin 은 현재 Addin 객체를 가리키며, Globals.ThisAddin.Application 은
ThisAddin으로부터 엑셀 Application 객체를 리턴한다. 이어 다시 엑셀 Application 으로부터
현재 작업중인 Workbook 인 ActiveWorkbook을 가져오고,
Workbook의 Name 속성 혹은 SaveCopyAs() 메서드를 호출한 것이다.
-
VS 에서 프로젝트를 빌드하면 자동으로 해당 Addin이 등록된다.
또한, [F5] 를 눌러 프로그램을 실행하면 VS 는 자동으로 해당 Addin 을 등록하고, Excel 을 구동시켜
Addin 이 동작되도록 한다.
참고로 엑셀 프로그램에서 Ribbon 그룹과 Tab 메뉴를 Customize 하기 위해서는
엑셀 상단의 리본에 있는 여백에서 RightClick을 하여
[Customize the Ribbon...] 메뉴를 선택하여 [Customize the Ribbon] 옵션화면을 띄운 후
새 탭을 만들거나 그룹을 드래그 앤 드롭하여 이동할 수 있다.
-
VS 에서 등록된 Addin 을 삭제하는 하기 위해서는 Build => Clean Solution 을 실행한다.