Sdílet prostřednictvím


Návod: Přidání ovládacích prvků do listu za běhu v projektu doplňku VSTO

Ovládací prvky můžete přidat do libovolného otevřeného listu pomocí doplňku Excel VSTO. Tento názorný postup ukazuje, jak pomocí pásu karet umožnit uživatelům přidat do Buttonlistu , aNamedRange.ListObject Informace najdete v tématu Přidání ovládacích prvků do dokumentů Office za běhu.

Platí pro: Informace v tomto tématu platí pro projekty doplňků VSTO pro Excel. Další informace najdete v tématu Dostupné funkce podle aplikace Office a typu projektu.

Tento návod znázorňuje následující úlohy:

  • Poskytnutí uživatelského rozhraní pro přidání ovládacích prvků do listu

  • Přidání ovládacích prvků do listu

  • Odebrání ovládacích prvků z listu

    Poznámka:

    Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace naleznete v tématu Přizpůsobení integrovaného vývojového prostředí (IDE).

Požadavky

K dokončení tohoto návodu budete potřebovat následující komponenty:

Vytvoření nového projektu doplňku VSTO v Excelu

Začněte vytvořením projektu doplňku VSTO aplikace Excel.

Vytvoření nového projektu doplňku VSTO v Excelu

  1. V sadě Visual Studio vytvořte projekt doplňku VSTO aplikace Excel s názvem ExcelDynamicControls. Další informace naleznete v tématu Postupy: Vytváření projektů Office v sadě Visual Studio.

  2. Přidejte odkaz na sestavení Microsoft.Office.Tools.Excel.v4.0.Utilities.dll . Tento odkaz je nutný k programovému přidání ovládacího prvku model Windows Forms do listu dále v tomto návodu.

Zadání uživatelského rozhraní pro přidání ovládacích prvků do listu

Přidání vlastní karty na pás karet Excelu Uživatelé můžou na kartě zaškrtnout políčka a přidat ovládací prvky do listu.

Zadání uživatelského rozhraní pro přidání ovládacích prvků do listu

  1. V nabídce Projekt klepněte na tlačítko Přidat novou položku.

  2. V dialogovém okně Přidat novou položku vyberte pás karet (Vizuální návrhář) a potom klikněte na Tlačítko Přidat.

    V Návrháři pásu karet se otevře soubor s názvem Ribbon1.cs nebo Ribbon1.vb a zobrazí výchozí kartu a skupinu.

  3. Na kartě Ovládací prvky pásu karet Office na panelu nástrojů přetáhněte ovládací prvek CheckBox na skupinu 1.

  4. Kliknutím na CheckBox1 ho vyberte.

  5. V okně Vlastnosti změňte následující vlastnosti.

    Vlastnost Hodnota
    Název Tlačítko
    Popisek Tlačítko
  6. Přidejte druhé zaškrtávací políčko do skupiny 1 a změňte následující vlastnosti.

    Vlastnost Hodnota
    Název Namedrange
    Popisek Namedrange
  7. Přidejte třetí zaškrtávací políčko do skupiny 1 a změňte následující vlastnosti.

    Vlastnost Hodnota
    Název Listobject
    Popisek Listobject

Přidání ovládacích prvků do listu

Spravované ovládací prvky je možné přidat pouze do hostitelských položek, které fungují jako kontejnery. Vzhledem k tomu, že projekty doplňků VSTO pracují s libovolným otevřeným sešitem, doplněk VSTO převede list na položku hostitele nebo získá existující položku hostitele před přidáním ovládacího prvku. Přidejte kód do obslužných rutin událostí kliknutí každého ovládacího prvku a vygenerujte Worksheet položku hostitele, která je založena na otevřeném listu. Potom na listu přidejte , Buttona NamedRangea a to ListObject na aktuální výběr.

Přidání ovládacích prvků do listu

  1. V Návrháři pásu karet poklikejte na tlačítko.

    Obslužná rutina Click události zaškrtávacího políčka Tlačítko se otevře v Editoru kódu.

  2. Obslužnou rutinu Button_Click události nahraďte následujícím kódem.

    Tento kód používá metodu GetVstoObject k získání hostitelské položky, která představuje první list v sešitu, a pak přidá Button ovládací prvek do aktuálně vybrané buňky.

    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. V Průzkumník řešení vyberte Ribbon1.cs nebo Ribbon1.vb.

  4. V nabídce Zobrazit klikněte na Návrhář.

  5. V Návrháři pásu karet poklikejte na NamedRange.

  6. Obslužnou rutinu NamedRange_Click události nahraďte následujícím kódem.

    Tento kód používá metodu GetVstoObject k získání hostitelské položky, která představuje první list v sešitu, a pak definuje ovládací prvek pro aktuálně vybranou NamedRange buňku nebo buňky.

    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. V Návrháři pásu karet poklikejte na ListObject.

  8. Obslužnou rutinu ListObject_Click události nahraďte následujícím kódem.

    Tento kód používá metodu GetVstoObject k získání hostitelské položky, která představuje první list v sešitu, a pak definuje pro aktuálně vybranou ListObject buňku nebo buňky.

    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. Na začátek souboru kódu pásu karet přidejte následující příkazy.

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

Odebrání ovládacích prvků z listu

Ovládací prvky se neuchovávají při uložení a zavření listu. Před uložením listu byste měli odebrat všechny vygenerované ovládací prvky model Windows Forms nebo se při opětovném otevření sešitu zobrazí jenom obrys ovládacího prvku. Přidejte kód do WorkbookBeforeSave události, která odebere ovládací prvky model Windows Forms z kolekce ovládacích prvků vygenerované položky hostitele. Další informace naleznete v tématu Zachování dynamických ovládacích prvků v dokumentech Office.

Odebrání ovládacích prvků z listu

  1. V Průzkumník řešení vyberte ThisAddIn.cs nebo ThisAddIn.vb.

  2. V nabídce Zobrazení klepněte na tlačítko Kód.

  3. Do třídy přidejte následující metodu ThisAddIn . Tento kód získá první list v sešitu a pak pomocí HasVstoObject metody zkontroluje, zda list obsahuje vygenerovaný objekt listu. Pokud má vygenerovaný objekt listu ovládací prvky, kód získá tento objekt listu a iteruje kolekci ovládacích prvků a odebere ovládací prvky.

           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. V jazyce C# musíte pro událost vytvořit obslužnou rutinu WorkbookBeforeSave události. Tento kód můžete umístit do ThisAddIn_Startup metody. Další informace o vytváření obslužných rutinudálostch Nahraďte metodu ThisAddIn_Startup následujícím kódem.

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

Testování řešení

Přidejte ovládací prvky do listu tak, že je vyberete z vlastní karty na pásu karet. Při uložení listu se tyto ovládací prvky odeberou.

K otestování řešení.

  1. Stisknutím klávesy F5 spusťte projekt.

  2. Vyberte libovolnou buňku v listu List1.

  3. Klikněte na kartu Doplňky .

  4. Ve skupině group1 klikněte na tlačítko.

    Ve vybrané buňce se zobrazí tlačítko.

  5. Vyberte jinou buňku v listu List1.

  6. Ve skupině 1 klikněte na NamedRange.

    Pojmenovaná oblast je definována pro vybranou buňku.

  7. Vyberte řadu buněk v listu List1.

  8. Ve skupině 1 klikněte na ListObject.

    Pro vybrané buňky se přidá objekt seznamu.

  9. Uložte list.

    Ovládací prvky, které jste přidali do listu List1, se už nezobrazují.

Další kroky

Další informace o ovládacích prvcích v projektech doplňků VSTO v Excelu najdete v tomto tématu:

  • Další informace o ukládání ovládacích prvků do listu najdete v ukázce a návodech k doplňku VSTO pro Excel VSTO.