İzlenecek yol: VSTO eklenti projesinde çalışma zamanında çalışma sayfasına denetim ekleme

Excel VSTO Eklentisi kullanarak herhangi bir açık çalışma sayfasına denetim ekleyebilirsiniz. Bu kılavuzda, kullanıcıların çalışma sayfasına bir , NamedRangeve ListObject eklemesine olanak tanımak için ButtonŞeridin nasıl kullanılacağı gösterilmektedir. Bilgi için bkz . Çalışma zamanında Office belgelerine denetim ekleme.

Şunlar için geçerlidir: Bu konudaki bilgiler Excel için VSTO Eklenti projeleri için geçerlidir. Daha fazla bilgi edinmek için bkz. Office Uygulaması ve Proje Türüne Göre Kullanılabilen Özellikler.

Bu izlenecek yol aşağıdaki görevleri gösterir:

  • Çalışma sayfasına denetim eklemek için bir kullanıcı arabirimi (UI) sağlama.

  • Çalışma sayfasına denetim ekleme.

  • Çalışma sayfasından denetimler kaldırılıyor.

    Not

    Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için bkz . IDE'yi kişiselleştirme.

Önkoşullar

Bu izlenecek yolu tamamlamak için aşağıdaki bileşenlere ihtiyacınız vardır:

  • Microsoft Office geliştirici araçlarını içeren bir Visual Studio sürümü. Daha fazla bilgi için bkz . Office çözümleri geliştirmek için bilgisayar yapılandırma.

  • Excel

Yeni bir Excel VSTO Eklenti projesi oluşturma

Excel VSTO Eklenti projesi oluşturarak başlayın.

Yeni bir Excel VSTO Eklenti projesi oluşturmak için

  1. Visual Studio'da, ExcelDynamicControls adlı bir Excel VSTO Eklenti projesi oluşturun. Daha fazla bilgi için bkz . Nasıl yapılır: Visual Studio'da Office Projeleri Oluşturma.

  2. Microsoft.Office.Tools.Excel.v4.0.Utilities.dll derlemesine başvuru ekleyin. Bu kılavuzun ilerleyen bölümlerinde bir çalışma sayfasına program aracılığıyla Windows Forms denetimi eklemek için bu başvuru gereklidir.

Çalışma sayfasına denetim eklemek için kullanıcı arabirimi sağlama

Excel Şeridi'ne özel bir sekme ekleyin. Kullanıcılar, çalışma sayfasına denetim eklemek için sekmedeki onay kutularını seçebilir.

Çalışma sayfasına denetim eklemek için kullanıcı arabirimi sağlamak için

  1. Proje menüsünde Yeni Öğe Ekle'ye tıklayın.

  2. Yeni Öğe Ekle iletişim kutusunda Şerit (Görsel Tasarım Aracı) öğesini seçin ve ekle'ye tıklayın.

    Şerit Tasarım Aracı Ribbon1.cs veya Ribbon1.vb adlı bir dosya açılır ve varsayılan sekme ve grup görüntülenir.

  3. Araç Kutusu'nun Office Şerit Denetimleri sekmesinden, bir CheckBox denetimini group1'e sürükleyin.

  4. Seçmek için CheckBox1'e tıklayın.

  5. Özellikler penceresinde aşağıdaki özellikleri değiştirin.

    Özellik Değer
    Ad Düğme
    Etiket Düğme
  6. Group1'e ikinci bir onay kutusu ekleyin ve aşağıdaki özellikleri değiştirin.

    Özellik Değer
    Ad Namedrange
    Etiket Namedrange
  7. Grup1'e üçüncü bir onay kutusu ekleyin ve aşağıdaki özellikleri değiştirin.

    Özellik Değer
    Ad Listobject
    Etiket Listobject

Çalışma sayfasına denetim ekleme

Yönetilen denetimler yalnızca kapsayıcı görevi gören konak öğelerine eklenebilir. VSTO Eklenti projeleri herhangi bir açık çalışma kitabıyla çalıştığından, VSTO Eklentisi denetimi eklemeden önce çalışma sayfasını bir konak öğesine dönüştürür veya var olan bir konak öğesini alır. Açık çalışma sayfasını temel alan bir Worksheet konak öğesi oluşturmak için her denetimin tıklama olay işleyicilerine kod ekleyin. Ardından, çalışma sayfasındaki geçerli seçime bir , ve ListObject ekleyinButtonNamedRange.

Çalışma sayfasına denetim eklemek için

  1. Şerit Tasarım Aracı Düğme'ye çift tıklayın.

    Click Düğme onay kutusunun olay işleyicisi Kod Düzenleyicisi'nde açılır.

  2. Olay işleyicisini Button_Click aşağıdaki kodla değiştirin.

    Bu kod, çalışma kitabındaki GetVstoObject ilk çalışma sayfasını temsil eden bir konak öğesi almak için yöntemini kullanır ve seçili durumdaki hücreye bir Button denetim ekler.

    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. Çözüm Gezgini'da Şerit1.cs veya Şerit1.vb'yi seçin.

  4. Görünüm menüsünde Tasarım Aracı'e tıklayın.

  5. Şerit Tasarım Aracı NamedRange öğesine çift tıklayın.

  6. Olay işleyicisini NamedRange_Click aşağıdaki kodla değiştirin.

    Bu kod, çalışma kitabındaki GetVstoObject ilk çalışma sayfasını temsil eden bir konak öğesi almak için yöntemini kullanır ve seçili durumdaki hücre veya hücreler için bir NamedRange denetim tanımlar.

    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. Şerit Tasarım Aracı ListObject öğesine çift tıklayın.

  8. Olay işleyicisini ListObject_Click aşağıdaki kodla değiştirin.

    Bu kod, çalışma kitabındaki GetVstoObject ilk çalışma sayfasını temsil eden ve seçili durumdaki hücre veya hücreler için bir tanımlayan bir ListObject konak öğesi almak için yöntemini kullanır.

    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. Şerit kod dosyasının en üstüne aşağıdaki deyimleri ekleyin.

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

Çalışma sayfasından denetimleri kaldırma

Çalışma sayfası kaydedildiğinde ve kapatıldığında denetimler kalıcı olmaz. Çalışma sayfası kaydedilmeden önce oluşturulan tüm Windows Forms denetimlerini program aracılığıyla kaldırmanız gerekir; aksi takdirde çalışma kitabı yeniden açıldığında denetimin yalnızca bir ana hattı görüntülenir. Oluşturulan konak öğesinin WorkbookBeforeSave denetim koleksiyonundan Windows Forms denetimlerini kaldıran olaya kod ekleyin. Daha fazla bilgi için bkz . Office belgelerinde dinamik denetimleri kalıcı hale getir.

Çalışma sayfasından denetimleri kaldırmak için

  1. Çözüm Gezgini'da ThisAddIn.cs veya ThisAddIn.vb öğesini seçin.

  2. Görünüm menüsünde Kod'a tıklayın.

  3. Sınıfına aşağıdaki yöntemi ThisAddIn ekleyin. Bu kod çalışma kitabındaki ilk çalışma sayfasını alır ve çalışma sayfasının oluşturulmuş bir çalışma sayfası nesnesi olup olmadığını denetlemek için yöntemini kullanır HasVstoObject . Oluşturulan çalışma sayfası nesnesinin denetimleri varsa, kod bu çalışma sayfası nesnesini alır ve denetim koleksiyonunda yinelenir ve denetimleri kaldırır.

           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. C# dilinde, olay için bir olay işleyicisi WorkbookBeforeSave oluşturmanız gerekir. Bu kodu yöntemine ThisAddIn_Startup yerleştirebilirsiniz. Olay işleyicileri oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Office projelerinde olay işleyicileri oluşturma. ThisAddIn_Startup yöntemini aşağıdaki kodla değiştirin.

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

Çözümü test etme

Şeritteki özel bir sekmeden seçerek çalışma sayfasına denetimler ekleyin. Çalışma sayfasını kaydettiğinizde, bu denetimler kaldırılır.

Çözümü test etmek için.

  1. Projenizi çalıştırmak için F5 tuşuna basın.

  2. Sayfa1'de herhangi bir hücreyi seçin.

  3. Eklentiler sekmesine tıklayın.

  4. group1 grubunda Düğme'ye tıklayın.

    Seçili hücrede bir düğme görüntülenir.

  5. Sayfa1'de farklı bir hücre seçin.

  6. group1 grubunda NamedRange'e tıklayın.

    Seçili hücre için adlandırılmış aralık tanımlanır.

  7. Sayfa1'de bir hücre serisi seçin.

  8. group1 grubunda ListObject'e tıklayın.

    Seçili hücreler için bir liste nesnesi eklenir.

  9. Çalışma sayfasını kaydedin.

    Sayfa1'e eklediğiniz denetimler artık görünmez.

Sonraki adımlar

Bu konudan Excel VSTO Eklenti projelerindeki denetimler hakkında daha fazla bilgi edinebilirsiniz:

  • Denetimleri çalışma sayfasına kaydetme hakkında bilgi edinmek için, Office geliştirme örnekleri ve izlenecek yollarda Excel VSTO Eklentisi Dinamik Denetimler Örneği'ne bakın.