Udostępnij za pośrednictwem


Przewodnik: dodawanie kontrolek do arkusza w czasie wykonywania w projekcie dodatku VSTO

Kontrolki można dodawać do dowolnego otwartego arkusza przy użyciu dodatku programu Excel VSTO. W tym przewodniku pokazano, jak używać wstążki, aby umożliwić użytkownikom dodawanie Buttonelementów , , NamedRangei do ListObject arkusza. Aby uzyskać informacje, zobacz Dodawanie kontrolek do dokumentów pakietu Office w czasie wykonywania.

Dotyczy: informacje w tym temacie dotyczą projektów dodatków VSTO dla programu Excel. Aby uzyskać więcej informacji, zobacz Dostępne funkcje uporządkowane według aplikacji pakietu Office i typu projektu.

W instruktażu przedstawiono następujące zagadnienia:

  • Udostępnianie interfejsu użytkownika w celu dodania kontrolek do arkusza.

  • Dodawanie kontrolek do arkusza.

  • Usuwanie kontrolek z arkusza.

    Uwaga

    Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Wymagania wstępne

Następujące składniki są wymagane do przeprowadzenia tego instruktażu:

Tworzenie nowego projektu dodatku programu Excel VSTO

Zacznij od utworzenia projektu dodatku VSTO programu Excel.

Aby utworzyć nowy projekt dodatku programu Excel VSTO

  1. W programie Visual Studio utwórz projekt dodatku VSTO programu Excel o nazwie ExcelDynamicControls. Aby uzyskać więcej informacji, zobacz How to: Create Office Projects in Visual Studio (Jak tworzyć projekty pakietu Office w programie Visual Studio).

  2. Dodaj odwołanie do zestawu Microsoft.Office.Tools.Excel.v4.0.Utilities.dll . To odwołanie jest wymagane do programowego dodania kontrolki Windows Forms do arkusza w dalszej części tego przewodnika.

Udostępnianie interfejsu użytkownika do dodawania kontrolek do arkusza

Dodaj kartę niestandardową do wstążki programu Excel. Użytkownicy mogą zaznaczać pola wyboru na karcie, aby dodać kontrolki do arkusza.

Aby udostępnić interfejs użytkownika do dodawania kontrolek do arkusza

  1. W menu Project (Projekt) kliknij pozycję Add New Item (Dodaj nowy element).

  2. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Wstążka (Visual Projektant), a następnie kliknij przycisk Dodaj.

    Plik o nazwie Ribbon1.cs lub Ribbon1.vb zostanie otwarty w Projektant wstążki i wyświetli domyślną kartę i grupę.

  3. Na karcie Kontrolki wstążki pakietu Office przybornika przeciągnij kontrolkę CheckBox do grupy group1.

  4. Kliknij pozycję CheckBox1 , aby ją zaznaczyć.

  5. W oknie Właściwości zmień następujące właściwości.

    Właściwości Wartość
    Nazwa/nazwisko Przycisk
    Etykieta Przycisk
  6. Dodaj drugie pole wyboru do grupy group1, a następnie zmień następujące właściwości.

    Właściwości Wartość
    Nazwa/nazwisko Namedrange
    Etykieta Namedrange
  7. Dodaj trzecie pole wyboru do grupy group1, a następnie zmień następujące właściwości.

    Właściwości Wartość
    Nazwa/nazwisko Listobject
    Etykieta Listobject

Dodawanie kontrolek do arkusza

Kontrolki zarządzane można dodawać tylko do elementów hosta, które działają jako kontenery. Ponieważ projekty dodatku VSTO działają z dowolnym otwartym skoroszytem, dodatek VSTO konwertuje arkusz na element hosta lub pobiera istniejący element hosta przed dodaniem kontrolki. Dodaj kod do programów obsługi zdarzeń kliknięcia każdej kontrolki, aby wygenerować Worksheet element hosta oparty na otwartym arkuszu. Następnie dodaj Buttonelement , a NamedRangei w ListObject bieżącym zaznaczeniu w arkuszu.

Aby dodać kontrolki do arkusza

  1. Na Projektant wstążki kliknij dwukrotnie przycisk.

    Procedura Click obsługi zdarzeń przycisku zostanie otwarta w Edytorze kodu.

  2. Zastąp Button_Click program obsługi zdarzeń następującym kodem.

    Ten kod używa GetVstoObject metody w celu pobrania elementu hosta reprezentującego pierwszy arkusz w skoroszycie, a następnie dodaje kontrolkę Button do aktualnie wybranej komórki.

    private void Button_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
        
        string buttonName = "MyButton";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                Microsoft.Office.Tools.Excel.Controls.Button button =
                    new Microsoft.Office.Tools.Excel.Controls.Button();
                worksheet.Controls.AddControl(button, selection, buttonName);
            }
        }
        else
        {
            worksheet.Controls.Remove(buttonName);
        }
    }
    
  3. W Eksplorator rozwiązań wybierz pozycję Wstążka1.cs lub Wstążka1.vb.

  4. W menu Widok kliknij pozycję Projektant.

  5. W Projektant wstążki kliknij dwukrotnie pozycję NamedRange.

  6. Zastąp NamedRange_Click program obsługi zdarzeń następującym kodem.

    Ten kod używa GetVstoObject metody , aby uzyskać element hosta reprezentujący pierwszy arkusz w skoroszycie, a następnie definiuje kontrolkę NamedRange dla aktualnie wybranej komórki lub komórek.

    private void NamedRange_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string Name = "MyNamedRange";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddNamedRange(selection, Name);
            }
        }
        else
        {
            worksheet.Controls.Remove(Name);
        }
    }
    
  7. Na Projektant wstążki kliknij dwukrotnie obiekt ListObject.

  8. Zastąp ListObject_Click program obsługi zdarzeń następującym kodem.

    Ten kod używa GetVstoObject metody w celu pobrania elementu hosta reprezentującego pierwszy arkusz w skoroszycie, a następnie definiuje element ListObject dla aktualnie wybranej komórki lub komórek.

    private void ListObject_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string listObjectName = "MyListObject";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddListObject(selection, listObjectName);
            }
        }
        else
        {
            worksheet.Controls.Remove(listObjectName);
        }
    }
    
  9. Dodaj następujące instrukcje w górnej części pliku kodu wstążki.

    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Tools.Excel;
    using Microsoft.Office.Tools.Excel.Extensions;
    

Usuwanie kontrolek z arkusza

Kontrolki nie są utrwalane podczas zapisywania i zamykania arkusza. Przed zapisaniem arkusza należy programowo usunąć wszystkie wygenerowane kontrolki Windows Forms lub po ponownym otwarciu skoroszytu pojawi się tylko konspekt kontrolki. Dodaj kod do WorkbookBeforeSave zdarzenia, które usuwa kontrolki Windows Forms z kolekcji kontrolek wygenerowanego elementu hosta. Aby uzyskać więcej informacji, zobacz Utrwalanie kontrolek dynamicznych w dokumentach pakietu Office.

Aby usunąć kontrolki z arkusza

  1. W Eksplorator rozwiązań wybierz pozycję ThisAddIn.cs lub ThisAddIn.vb.

  2. W menu Widok kliknij pozycję Kod.

  3. Dodaj następującą metodę do ThisAddIn klasy . Ten kod pobiera pierwszy arkusz w skoroszycie, a następnie używa HasVstoObject metody w celu sprawdzenia, czy arkusz ma wygenerowany obiekt arkusza. Jeśli wygenerowany obiekt arkusza zawiera kontrolki, kod pobiera ten obiekt arkusza i iteruje przez kolekcję kontrolek, usuwając kontrolki.

           void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, 
               bool SaveAsUI, ref bool Cancel)
           {
               Excel.Worksheet worksheet =
                   workbook.Worksheets[1] as Excel.Worksheet;
               
               if (Globals.Factory.HasVstoObject(worksheet) && 
                   Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0)
               {
                   Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet);
               
              
                   
                   while (vstoWorksheet.Controls.Count > 0)
                   {
                       object vstoControl = vstoWorksheet.Controls[0];
                       vstoWorksheet.Controls.Remove(vstoControl);
                   }
    
               }
           }
    
  4. W języku C#należy utworzyć procedurę obsługi zdarzeń dla WorkbookBeforeSave zdarzenia. Ten kod można umieścić w metodzie ThisAddIn_Startup . Aby uzyskać więcej informacji na temat tworzenia programów obsługi zdarzeń, zobacz How to: Create event handlers in Office projects (Instrukcje: tworzenie programów obsługi zdarzeń w projektach pakietu Office). Zastąp metodę ThisAddIn_Startup następującym kodem.

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.WorkbookBeforeSave += 
            new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler
                (Application_WorkbookBeforeSave);
    }
    

Testowanie rozwiązania

Dodaj kontrolki do arkusza, wybierając je na karcie niestandardowej na wstążce. Po zapisaniu arkusza te kontrolki zostaną usunięte.

Aby przetestować rozwiązanie.

  1. Naciśnij klawisz F5 , aby uruchomić projekt.

  2. Wybierz dowolną komórkę w arkuszu Sheet1.

  3. Kliknij kartę Dodatki .

  4. W grupie group1 kliknij przycisk.

    Przycisk zostanie wyświetlony w wybranej komórce.

  5. Wybierz inną komórkę w arkuszu Sheet1.

  6. W grupie group1 kliknij pozycję NamedRange.

    Nazwany zakres jest definiowany dla wybranej komórki.

  7. Wybierz serię komórek w arkuszu Sheet1.

  8. W grupie group1 kliknij pozycję ListObject.

    Obiekt listy jest dodawany dla zaznaczonych komórek.

  9. Zapisz arkusz.

    Kontrolki dodane do arkusza Sheet1 nie są już wyświetlane.

Następne kroki

Więcej informacji na temat kontrolek w projektach dodatków VSTO programu Excel można dowiedzieć się z tego tematu: