Wskazówki: dodawanie formantów do arkuszy w czasie wykonywania w projektach na poziomie aplikacji
Formanty można dodać do dowolnego otwartego arkusza przy użyciu dodatek programu Excel.W tym instruktażu przedstawiono sposób użycia na Wstążce w celu umożliwienia użytkownikom dodać Button, NamedRangei ListObject do arkusza.Aby uzyskać informacje, zobacz Dodawanie formantów do dokumentów pakietu Office w czasie wykonywania.
Stosuje się do: informacje w tym temacie dotyczą projektów poziomie aplikacji dla programu Excel 2010.Aby uzyskać więcej informacji, zobacz Funkcje dostępne w aplikacjach pakietu Office i typ projektu.
W tym instruktażu przedstawiono następujące zadania:
Zapewnienie interfejsu użytkownika (UI), aby dodać formanty do arkusza.
Dodawanie formantów do arkusza.
Usuwanie formantów 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 Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.
Wymagania wstępne
Potrzebne do przeprowadzenia tego instruktażu następujące składniki:
Edycja programu Visual Studio 2013, która oferuje narzędzia deweloperskie pakietu Microsoft Office. Aby uzyskać więcej informacji, zobacz Konfigurowanie komputera do opracowywania rozwiązań pakietu Office.
Excel 2013or Excel 2010.
Tworzenie nowego programu Excel dodatek projektu
Rozpocząć od utworzenia Excel-w projekcie.
Aby utworzyć nowy program Excel-w projekt
W Visual Studio, tworzenie dodatek Excel projektu o nazwie ExcelDynamicControls.Aby uzyskać więcej informacji, zobacz Porady: tworzenie projektów Office w Visual Studio.
Dodaj odwołanie do Microsoft.Office.Tools.Excel.v4.0.Utilities.dll zestawu.To odwołanie jest wymagane do programowego dodania formantu Windows Forms do arkusza później w tym instruktażu.
Zapewnienie interfejsu użytkownika, aby dodać formanty do arkusza
Dodawanie karty niestandardowej do Wstążki programu Excel.Użytkownicy mogą wybrać pola wyboru na karcie, aby dodać formanty do arkusza.
Aby zapewnić interfejs użytkownika, aby dodać formanty do arkusza
Na Projekt menu, kliknij przycisk Dodaj nowy element.
W Dodaj nowy element okno dialogowe, wybierz wstążki (Visual Designer), a następnie kliknij przycisk Dodaj.
Plik o nazwie Ribbon1.cs lub Ribbon1.vb otwiera projektanta wstążki i wyświetla domyślną kartę i grupy.
Z Formanty wstążki Office karta Przybornik, przeciągnij formant pola wyboru na grupa1.
Kliknij przycisk CheckBox1 , aby go zaznaczyć.
W Właściwości okna, Zmień następujące właściwości.
Właściwość
Wartość
Nazwa
Przycisk
Etykieta
Przycisk
Drugie pole wyboru, aby dodać grupa1, a następnie Zmień następujące właściwości.
Właściwość
Wartość
Nazwa
NamedRange
Etykieta
NamedRange
Trzecie pole wyboru, aby dodać grupa1, a następnie Zmień następujące właściwości.
Właściwość
Wartość
Nazwa
Obiektu ListObject
Etykieta
Obiektu ListObject
Dodawanie formantów do arkusza
Zarządzane formanty można dodać tylko do hosta elementów, które działają jako kontenery.Ponieważ projektów w pracy z dowolnego otwartego skoroszytu, to dodatek konwertuje arkusza do pozycji hosta lub pobiera istniejącego elementu hosta, przed dodaniem kontroli.Dodaj kod do obsługi zdarzeń kliknij każdy formant do generowania Worksheet element hosta, który opiera się na otwartego arkusza.Następnie należy dodać Button, NamedRangei ListObject w bieżące zaznaczenie w arkuszu.
Aby dodać formanty do arkusza
W Projektancie wstążki, kliknij dwukrotnie przycisk.
Click Obsługi zdarzeń z przycisk pole wyboru zostanie otwarty w edytorze kodu.
Zamień Button_Click obsługi zdarzeń z następującego kodu.
Ten kod zawiera GetVstoObject metoda przedmiotu hosta, który reprezentuje pierwszym arkuszu w skoroszycie, a następnie dodaje Button kontroli do zaznaczonej komórki.
Private Sub Button_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles Button.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) Dim buttonName As String = "MyButton" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim button As New Microsoft.Office.Tools.Excel.Controls.Button() worksheet.Controls.AddControl(button, selection, buttonName) End If Else worksheet.Controls.Remove(buttonName) End If End Sub
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 Solution Explorer, wybierz opcję Ribbon1.cs lub Ribbon1.vb.
Na Widok menu, kliknij przycisk Projektant.
W Projektancie wstążki, kliknij dwukrotnie NamedRange.
Zamień NamedRange_Click obsługi zdarzeń z następującego kodu.
Ten kod zawiera GetVstoObject metoda przedmiotu hosta, który reprezentuje pierwszym arkuszu w skoroszycie, a następnie określa NamedRange kontroli dla aktualnie zaznaczoną komórkę lub komórki.
Private Sub NamedRange_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles NamedRange.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) Dim rangeName As String = "MyNamedRange" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim namedRange As NamedRange = _ worksheet.Controls.AddNamedRange(selection, rangeName) End If Else worksheet.Controls.Remove(rangeName) End If End Sub
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); } }
W Projektancie wstążki, kliknij dwukrotnie obiektu ListObject.
Zamień ListObject_Click obsługi zdarzeń z następującego kodu.
Ten kod zawiera GetVstoObject metoda przedmiotu hosta, który reprezentuje pierwszym arkuszu w skoroszycie, a następnie określa ListObject dla aktualnie zaznaczoną komórkę lub komórki.
Private Sub ListObject_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles ListObject.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) Dim listObjectName As String = "MyListObject" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = _ Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then worksheet.Controls.AddListObject(selection, listObjectName) End If Else worksheet.Controls.Remove(listObjectName) End If End Sub
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 do początku pliku kodu wstążki.
Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.Office.Tools.Excel Imports Microsoft.Office.Tools.Excel.Extensions
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Tools.Excel; using Microsoft.Office.Tools.Excel.Extensions;
Usuwanie formantów z arkusza
Formanty nie są zachowywane po zapisaniu i zamknięciu arkusza.Wszystkie wygenerowane formanty Windows Forms należy usunąć programowo, zanim arkusz jest zapisywany lub tylko konspekt formantu pojawi się po ponownym otwarciu skoroszytu.Dodawanie kodu do WorkbookBeforeSave zdarzenie, które usuwa Windows Forms formantów z kolekcji controls towaru generowane hosta.Aby uzyskać więcej informacji, zobacz Przechowywanie formantów dynamicznych w dokumentach pakietu Office.
Aby usunąć kontroli z arkusza
W Solution Explorer, wybierz opcję ThisAddIn.cs lub ThisAddIn.vb.
Na Widok menu, kliknij przycisk Kod.
Dodaj następującą metodę do klasy ThisAddIn.Ten kod pobiera pierwszym arkuszu w skoroszycie, a następnie używa HasVstoObject metoda, aby sprawdzić, czy arkusz zawiera obiekt arkusza generowany.Jeśli obiekt wygenerowany arkusz zawiera formanty, kod pobiera obiekt arkusza i iterację kolekcji formantów, usuwanie formantów.
Sub Application_WorkbookBeforeSave _ (ByVal workbook As Microsoft.Office.Interop.Excel.Workbook, _ ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) _ Handles Application.WorkbookBeforeSave Dim worksheet As Excel.Worksheet = workbook.Worksheets(1) If Globals.Factory.HasVstoObject(worksheet) And Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0 Then Dim vstoWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet) While vstoWorksheet.Controls.Count > 0 Dim vstoControl As Object = vstoWorksheet.Controls(0) vstoWorksheet.Controls.Remove(vstoControl) End While End If End Sub
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ć program obsługi zdarzeń dla WorkbookBeforeSave zdarzenie.Można umieścić ten kod w ThisAddIn_Startup metoda.Aby uzyskać więcej informacji na temat tworzenia procedury obsługi zdarzeń, zobacz Porady: tworzenie obsługi zdarzeń w projektach pakietu Office.Zamień ThisAddIn_Startup metoda następujący kod.
private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler (Application_WorkbookBeforeSave); }
Testowanie rozwiązania
Dodać formanty do arkusza, wybierając je z karty niestandardowej na Wstążce.Po zapisaniu arkusza, te formanty są usuwane.
Aby przetestować rozwiązanie.
Naciśnij klawisz F5, aby uruchomić projekt.
Zaznacz dowolną komórkę w arkuszu Arkusz1.
Kliknij przycisk Dodatki kartę.
W grupa1 grupy, kliknij przycisk przycisk.
Przycisk pojawia się w wybranej komórce.
Wybierz inną komórkę w arkuszu Arkusz1.
W grupa1 grupy, kliknij przycisk NamedRange.
Nazwany zakres jest zdefiniowany dla zaznaczonej komórki.
Wybierz serię komórek w arkuszu Arkusz1.
W grupa1 grupy, kliknij przycisk obiektu ListObject.
Obiekt listy jest dodawany do zaznaczonych komórek.
Zapisz arkusz.
Pojawią się formanty, które nie są już dodane do Arkusz1.
Następne kroki
Więcej o formantach w Excel-w projektach z tego tematu można uzyskać:
- Aby dowiedzieć się jak zapisać formantów do arkusza, zobacz Excel-w dynamicznej kontroli próbki w Office Development ― Przykłady i wskazówki.
Zobacz też
Koncepcje
Formanty formularzy Windows w dokumentach pakietu Office ― Omówienie