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:
Edycja programu Visual Studio, która oferuje narzędzia deweloperskie pakietu Microsoft Office. Aby uzyskać więcej informacji, zobacz Konfigurowanie komputera do tworzenia rozwiązań pakietu Office.
Excel
Tworzenie nowego projektu dodatku programu Excel VSTO
Zacznij od utworzenia projektu dodatku VSTO programu Excel.
Aby utworzyć nowy projekt dodatku programu Excel VSTO
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).
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
W menu Project (Projekt) kliknij pozycję Add New Item (Dodaj nowy element).
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ę.
Na karcie Kontrolki wstążki pakietu Office przybornika przeciągnij kontrolkę CheckBox do grupy group1.
Kliknij pozycję CheckBox1 , aby ją zaznaczyć.
W oknie Właściwości zmień następujące właściwości.
Właściwości Wartość Nazwa/nazwisko Przycisk Etykieta Przycisk 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 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
Na Projektant wstążki kliknij dwukrotnie przycisk.
Procedura Click obsługi zdarzeń przycisku zostanie otwarta w Edytorze kodu.
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); } }
W Eksplorator rozwiązań wybierz pozycję Wstążka1.cs lub Wstążka1.vb.
W menu Widok kliknij pozycję Projektant.
W Projektant wstążki kliknij dwukrotnie pozycję NamedRange.
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); } }
Na Projektant wstążki kliknij dwukrotnie obiekt ListObject.
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); } }
Dodaj następujące instrukcje w górnej części pliku kodu wstążki.
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
W Eksplorator rozwiązań wybierz pozycję ThisAddIn.cs lub ThisAddIn.vb.
W menu Widok kliknij pozycję Kod.
Dodaj następującą metodę do
ThisAddIn
klasy . Ten kod pobiera pierwszy arkusz w skoroszycie, a następnie używaHasVstoObject
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); } } }
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.
Naciśnij klawisz F5 , aby uruchomić projekt.
Wybierz dowolną komórkę w arkuszu Sheet1.
Kliknij kartę Dodatki .
W grupie group1 kliknij przycisk.
Przycisk zostanie wyświetlony w wybranej komórce.
Wybierz inną komórkę w arkuszu Sheet1.
W grupie group1 kliknij pozycję NamedRange.
Nazwany zakres jest definiowany dla wybranej komórki.
Wybierz serię komórek w arkuszu Sheet1.
W grupie group1 kliknij pozycję ListObject.
Obiekt listy jest dodawany dla zaznaczonych komórek.
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:
- Aby dowiedzieć się więcej na temat zapisywania kontrolek w arkuszu, zobacz Przykład dodatku VSTO programu Excel dotyczący kontrolek dynamicznych w przykładach programowania pakietu Office i przewodnikach.