2012-10-26 3 views
4

나는 Excel 추가 기능을 사용하고 있으며로드 블록을 쳤다.시트 추가 및 제거 추적 유지

Excel 통합 문서의 시트로 콤보 상자를 업데이트하고 싶습니다. 현재 foreach 루프를 사용하여이 작업을 수행 할 수 있습니다. 그러나이 기능은 실행했을 때 추가되거나 차감 된 시트 만 선택한다는 의미에서 제한적입니다. 내 addin은 "새로 고침 시트"버튼으로 끈적 해 보입니다. 가능한 경우이를 피하고 싶습니다.

이상적으로는 워크 시트 개체를 콤보 상자에 데이터 바인딩 할 수있어 내 간섭없이 즉시 업데이트됩니다. 그러나, 나의 연구는 그것을지지하지 않는다는 것을 나타 냈습니다. 나는 나중에 그것을 내 dev에 컴퓨터 앞에 있지 않기 때문에 그것을 시도하지 않은,하지만 그것은 거의 데이터 소스로 작동하지 않습니다 IList를 상속하지 않기 때문에 나는 긍정적이다.

비슷한 일을 한 사람이 있습니까? 이 일을 올바르게 진행하고 싶습니다.

감사합니다.

답변

3

Excel.Application 개체에는 새 시트가 추가 될 때 발생하는 WorkbookNewSheet 이벤트가 있습니다. 불행히도 시트가 제거 될 때 발생하는 이벤트가없는 것 같습니다.

콤보 상자의 업데이트 코드를 콤보 상자의 DropDown 이벤트에 넣을 수 있습니다. 콤보 상자가 열리면 시작되고 코드는 목록이 표시되기 전에 콤보 상자 항목을 업데이트 할 수 있습니다.

+0

이렇게해도 좋습니다. 두 가지 권장 사항을 모두 시도해 볼 것입니다 (Doug는 더 일반적인 것부터 시작합니다). 그리고 가장 잘 작동하는지 확인해 보겠습니다. 고맙습니다! – user1778345

2

나는 WarrenG의 드롭 다운 이벤트 아이디어를 좋아합니다. 그게 효과적이라면 이상적으로 보입니다. 그렇지 않으면 통합 문서의 Sheet_Activate 이벤트를 사용하는 것이 좋습니다. 적어도 사용자가 작업을 완료하면 시트가 작성되거나 삭제 될 때 발생합니다.

C#에서는 이벤트를 인스턴스화하고 처리기를 만들어야합니다. Form_Load 이벤트에서 실제로이 작업을 수행 할 수 있으므로 폼이 인스턴스화 될 때 이벤트 처리기가 만들어집니다.

using Excel = Microsoft.Office.Interop.Excel; 

namespace ExcelWorkbook1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      Globals.ThisWorkbook.SheetActivate += 
       new Excel.WorkbookEvents_SheetActivateEventHandler(
       ThisWorkbook_SheetActivate); 
     } 

     private void ThisWorkbook_SheetActivate(object Sh) 
     { 
      //Fill your combobox here 
     } 
    } 
} 

편집 :

그래서, 당신의 Form_Load 이벤트는 다음과 같은 : 당신은 너무 당신의 Form.cs 코드는 다음과 같이 보일 것이다 Interop.Excel에 대한 참조를 설정해야합니다 나는 기본 코드를 발견 at this MSDN site .

+0

고맙습니다. 이것은 훌륭합니다. 나는 몇 시간 만에 집에있을 것이고 나는 그것을 시험 할 수있을 것이다. 나는 너를 최신 상태로 유지할 것이다. 마이크로 소프트가 시트 이벤트를 더 잘 해줬 으면 좋겠다. 하나의 질문 : 비록 그것이 항상 작동하도록 ThisAddin.cs 파일에 핸들러를 만들 수 있습니까? 아니면 메인 리본 CS 파일일까요? 다시 한 번 감사드립니다! – user1778345

+0

반갑습니다. 네, ThisAddin_Startup 이벤트에서 만들 수 있습니다. (필자는 그것이라고 생각합니다) 또는 필요한 곳 ​​어디에서든지 실행됩니다. 또 다른 메모에서, 코드 응답이 많은 MSDN 페이지에 대한 링크를 사용하여 응답을 편집했습니다. (저는 C#으로 꽤 느립니다.) –

+0

그의 드롭 다운 솔루션이 더 우아하기 때문에 나는 WarrenG에 체크 표시를했다. 그러나 이벤트 처리기를 사용하는 것은 눈을 뜨게하고 코드에는 사용법이 있다는 점을 지적하고 싶습니다. 다시 한번 감사드립니다. – user1778345