C#

엑셀 Addin 커스텀 메뉴 추가

엑셀에 커스텀 메뉴 추가

Excel Addin 으로 엑셀 기능을 확장하는 기능의 하나로 엑셀에 Custom 메뉴 (사용자 정의 메뉴)를 추가할 수 있다. 예를 들어, 아래 그림은 엑셀 메인 메뉴에 "My Cloud" 라는 사용자 정의 메뉴를 추가한 것이다. 참고로 아래 그림과 같은 스타일의 메뉴를 리본(Ribbon) 메뉴라 한다.

엑셀 Add-in 작성

엑셀 Addin으로 사용자 정의 커스텀 메뉴를 추가하는 절차는 다음과 같다.

  1. Visual Studio를 실행하여 새 VSTO Excel Add-ins 프로젝트를 생성한다. (File => New Project => Visual C# => Office/Sharepoint => VSTO Add-ins => Excel 2013 and 2016 VSTO Add-in 선택)
  2. 엑셀 Addin에서 Ribbon을 생성하기 위해서는 Project 메뉴 => Add New Item 에서 “Ribbon (Visual Designer)” 를 선택한다. (파일명은 임의로 MyRibbon.cs 라고 정함)
  3. 리본(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]로 설정하였다.
  4. 리본(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() 메서드를 호출한 것이다.
  5. VS 에서 프로젝트를 빌드하면 자동으로 해당 Addin이 등록된다. 또한, [F5] 를 눌러 프로그램을 실행하면 VS 는 자동으로 해당 Addin 을 등록하고, Excel 을 구동시켜 Addin 이 동작되도록 한다.
    참고로 엑셀 프로그램에서 Ribbon 그룹과 Tab 메뉴를 Customize 하기 위해서는 엑셀 상단의 리본에 있는 여백에서 RightClick을 하여 [Customize the Ribbon...] 메뉴를 선택하여 [Customize the Ribbon] 옵션화면을 띄운 후 새 탭을 만들거나 그룹을 드래그 앤 드롭하여 이동할 수 있다.
  6. VS 에서 등록된 Addin 을 삭제하는 하기 위해서는 Build => Clean Solution 을 실행한다.
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

Previous Next Print