Udostępnij za pośrednictwem


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:

Tworzenie nowego programu Excel dodatek projektu

Rozpocząć od utworzenia Excel-w projekcie.

Aby utworzyć nowy program Excel-w projekt

  1. W Visual Studio, tworzenie dodatek Excel projektu o nazwie ExcelDynamicControls.Aby uzyskać więcej informacji, zobacz Porady: tworzenie projektów Office w Visual Studio.

  2. 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

  1. Na Projekt menu, kliknij przycisk Dodaj nowy element.

  2. 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.

  3. Z Formanty wstążki Office karta Przybornik, przeciągnij formant pola wyboru na grupa1.

  4. Kliknij przycisk CheckBox1 , aby go zaznaczyć.

  5. W Właściwości okna, Zmień następujące właściwości.

    Właściwość

    Wartość

    Nazwa

    Przycisk

    Etykieta

    Przycisk

  6. 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

  7. 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

  1. W Projektancie wstążki, kliknij dwukrotnie przycisk.

    Click Obsługi zdarzeń z przycisk pole wyboru zostanie otwarty w edytorze kodu.

  2. 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);
        }
    }
    
  3. W Solution Explorer, wybierz opcję Ribbon1.cs lub Ribbon1.vb.

  4. Na Widok menu, kliknij przycisk Projektant.

  5. W Projektancie wstążki, kliknij dwukrotnie NamedRange.

  6. 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);
        }
    }
    
  7. W Projektancie wstążki, kliknij dwukrotnie obiektu ListObject.

  8. 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);
        }
    }
    
  9. 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

  1. W Solution Explorer, wybierz opcję ThisAddIn.cs lub ThisAddIn.vb.

  2. Na Widok menu, kliknij przycisk Kod.

  3. 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);
            }
    
        }
    }
    
  4. 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.

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

  2. Zaznacz dowolną komórkę w arkuszu Arkusz1.

  3. Kliknij przycisk Dodatki kartę.

  4. W grupa1 grupy, kliknij przycisk przycisk.

    Przycisk pojawia się w wybranej komórce.

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

  6. W grupa1 grupy, kliknij przycisk NamedRange.

    Nazwany zakres jest zdefiniowany dla zaznaczonej komórki.

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

  8. W grupa1 grupy, kliknij przycisk obiektu ListObject.

    Obiekt listy jest dodawany do zaznaczonych komórek.

  9. 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ć:

Zobacz też

Koncepcje

Formanty formularzy Windows w dokumentach pakietu Office ― Omówienie

NamedRange — Formant

ListObject — Formant

Inne zasoby

Rozwiązania programu Excel

Formanty w dokumentach pakietu Office