Aracılığıyla paylaş


Uygulama Düzeyi Eklentilerindeki Word Belgelerini ve Excel Çalışma Kitaplarını Çalışma Zamanında Genişletme

Uygulama düzeyi eklentisi, Word belgelerini ve Excel çalışma kitaplarını aşağıdaki şekillerde özelleştirmek için kullanabilirsiniz:

  • Açık belgeye veya çalışma sayfasına yönetilen denetimler ekleyin.

  • Excel çalışma kitabında varolan liste nesnesini, olaylar oluşturan ve Windows Forms veri bağlama modelini kullanarak veriyi bağlayabilen, genişletilmiş ListObject'e dönüştürün.

  • Belli belgeler, çalışma kitapları ve çalışma sayfaları için Word ve Excel tarafından oluşturulan uygulama düzeyi olaylara erişin.

Bu işlevselliği kullanmak için, belge veya çalışma kitabını genişleten bir nesneyi çalışma zamanında yaratırsınız.

İçin geçerlidir: bu konudaki bilgiler, uygulama düzeyinde projeleri aşağıdaki uygulamalar için geçerlidir: Excel 2010; Word'ün 2010.Daha fazla bilgi için bkz. Office Uygulaması ve Proje Türüne Göre Kullanılabilir Özellikler.

Eklentilerdeki Genişletilmiş Nesneleri Yaratma

Nesneleri genişletilmiş özgün Word veya Excel nesne modelinde mevcut nesnelere işlevsellik eklemek için Office çalışma zamanı Visual Studio araçları tarafından sağlanan türleri örnekleri (adlı yerel Office nesnelerine).Word ve Excel nesnesi için genişletilmiş nesne yaratmak üzere, GetVstoObject yöntemini kullanın.Çağırdığınız ilk kez GetVstoObject yöntemi için belirtilen Word veya Excel nesnesi, belirtilen nesne genişleten yeni bir nesne döndürür. Yöntemini çağırın ve aynı Word veya Excel belirttiğiniz her nesne, aynı Genişletilmiş nesnesini döndürür.

Genişletilmiş nesnenin türü, yerel Office nesnesinin türüyle aynı ada sahiptir, ama tür Microsoft.Office.Tools.Excel veya Microsoft.Office.Tools.Word isim uzayında tanımlanır.Örneğin, eğer Document nesnesini genişletmek için GetVstoObject yöntemini çağırırsanız, yöntem Document nesnesi döner.

GetVstoObject yöntemleri öncelikli olarak uygulama düzeyi projelerinde kullanılmaya yöneliktir.Bu yöntemleri belge düzeyi projelerinde de kullanabilirsiniz, ama farklı davranırlar ve daha az kullanıma sahiptirler.

Genişletilmiş nesnenin, belirli bir yerel Office nesnesi için yaratılıp yaratılmadığına karar vermek için, HasVstoObject yöntemini kullanın.Daha fazla bilgi için, bkz. Determining Whether an Office Object Has Been Extended.

Konak Öğeleri Yaratma

Belge düzeyi nesnesini (Workbook, Worksheet veya Document olan) genişletmek için GetVstoObject kullandığınızda, döndürülen nesne konak öğesi olarak adlandırılır.Konak öğesi, diğer genişletilmiş nesneler ve denetimler dahil olmak üzere diğer nesneleri içeren bir türdür.Word veya Excel birincil birlikte çalışma derlemesine benzer ama ek özellikleri vardır.Konak öğeleri hakkında daha fazla bilgi için, bkz. Ana Bilgisayar Öğelerine ve Denetimlerine Genel Bakış.

Ana madde üretmek sonra belge, çalışma kitabı veya çalışma sayfası yönetilen denetimleri eklemek için kullanabilirsiniz.Daha fazla bilgi için bkz: Belgeleri ve çalışma sayfaları için yönetilen denetimleri ekleyerek.

Word belgesinde konak öğesi yaratmak için

  • Aşağıdaki kod örneği, etkin belge için ana madde üretmek gösterilmiştir.

    If Globals.ThisAddIn.Application.Documents.Count > 0 Then 
        Dim NativeDocument As Microsoft.Office.Interop.Word.Document = _
            Globals.ThisAddIn.Application.ActiveDocument
        Dim VstoDocument As Microsoft.Office.Tools.Word.Document = _
            Globals.Factory.GetVstoObject(NativeDocument)
    End If
    
    if (Globals.ThisAddIn.Application.Documents.Count > 0)
    {
        Microsoft.Office.Interop.Word.Document nativeDocument =
            Globals.ThisAddIn.Application.ActiveDocument;
        Microsoft.Office.Tools.Word.Document vstoDocument =
            Globals.Factory.GetVstoObject(nativeDocument);
    }
    

Excel çalışma kitabında konak öğesi yaratmak için

  • Aşağıdaki kod örneği, etkin çalışma kitabı için bir ana madde üretmek gösterilmiştir.

    Dim NativeWorkbook As Microsoft.Office.Interop.Excel.Workbook =
        Globals.ThisAddIn.Application.ActiveWorkbook
    If NativeWorkbook IsNot Nothing Then 
        Dim vstoWorkbook As Microsoft.Office.Tools.Excel.Workbook =
            Globals.Factory.GetVstoObject(NativeWorkbook)
    End If
    
    Microsoft.Office.Interop.Excel.Workbook nativeWorkbook = 
        Globals.ThisAddIn.Application.ActiveWorkbook;
    if (nativeWorkbook != null)
    {
        Microsoft.Office.Tools.Excel.Workbook vstoWorkbook = 
            Globals.Factory.GetVstoObject(nativeWorkbook);
    }
    

Excel çalışma sayfasında konak öğesi yaratmak için

  • Aşağıdaki kod örneği, etkin çalışma sayfasının ana öğe bir proje oluşturmak gösterilmiştir.

    Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet =
        Globals.ThisAddIn.Application.ActiveSheet
    If NativeWorksheet IsNot Nothing Then 
        Dim vstoSheet As Microsoft.Office.Tools.Excel.Worksheet =
            Globals.Factory.GetVstoObject(NativeWorksheet)
    End If
    
    Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet =
        Globals.ThisAddIn.Application.ActiveSheet;
    if (nativeWorksheet != null)
    {
        Microsoft.Office.Tools.Excel.Worksheet vstoSheet = 
            Globals.Factory.GetVstoObject(nativeWorksheet);
    }
    

ListObject Konak Denetimlerini Yaratma

ListObject'i genişletmek için GetVstoObject yöntemini kullandığınızda, yöntem ListObject döner.ListObject, özgün ListObject'in tüm özelliklerine sahiptir, ama ayrıca ek işlevselliklere de sahiptir, örn. Windows Forms veri bağlama modelini kullanarak veri bağlama yeteneği.Daha fazla bilgi için bkz. ListObject Denetimi.

ListObject konak denetimi yaratmak için

  • Aşağıdaki kod örneği oluşturmak nasıl gösterilmektedir bir ListObject ilk kez ListObject etkin çalışma sayfasındaki bir projede.

    Dim sheet As Microsoft.Office.Interop.Excel.Worksheet =
        Globals.ThisAddIn.Application.ActiveSheet
    If sheet.ListObjects.Count > 0 Then 
        Dim listObject As Excel.ListObject = sheet.ListObjects(1)
        Dim vstoListObject As Microsoft.Office.Tools.Excel.ListObject =
            Globals.Factory.GetVstoObject(listObject)
    End If
    
    Microsoft.Office.Interop.Excel.Worksheet sheet =
        Globals.ThisAddIn.Application.ActiveSheet;
    if (sheet.ListObjects.Count > 0)
    {
        Excel.ListObject listObject = 
            sheet.ListObjects[1];
        Microsoft.Office.Tools.Excel.ListObject vstoListObject =
            Globals.Factory.GetVstoObject(listObject);
    }
    

Belgeye veya Çalışma Sayfasına Yönetilen Denetimler Ekleme

Document veya Worksheet yarattıktan sonra, bu genişletilmiş nesneleri temsil eden belge veya çalışma sayfasına denetimler ekleyebilirsiniz.Bunu yapmak için, Document veya Worksheet'un Controls özelliğini kullanın.Daha fazla bilgi için bkz. Office Belgelerine Çalışma Zamanında Denetim Ekleme.

Windows Forms denetimleri veya konak denetimleri ekleyebilirsiniz.Konak kontrolü, Word veya Excel birincil birlikte çalışma derlemesindeki ilgili denetimi kapsayan Office çalışma zamanı için Visual Studio Araçları tarafından sağlanan bir denetimdir.Konak kontrolü, arka plandaki yerel Office nesnesinin davranışlarının hepsini oluşturur ama ayrıca olay yaratır ve Windows Forms veri bağlama modelini kullanarak veriye bağlanabilir.Daha fazla bilgi için bkz. Ana Bilgisayar Öğelerine ve Denetimlerine Genel Bakış.

[!NOT]

Önce ekleyemezsiniz bir XmlMappedRange denetlemek için bir çalışma sayfası veya bir XMLNode veya XMLNodes denetimi ek bileşeni kullanılarak, bir belgede.Bu konak kontrolleri programlı olarak eklenemez.Daha fazla bilgi için bkz. Konak Denetimlerinin ve Konak Öğelerinin Programlama Sınırlamaları.

Denetimleri Kalıcı Yapma ve Kaldırma

Belge veya çalışma sayfasına yönetilen denetimler eklediğinizde, belge kaydedilip kapatıldığında denetimler kalıcı değildir.Tüm ana denetimler, böylece yalnızca arka plandaki doğal Office nesneleri geride kaldırılır.Örneğin, bir ListObject olur bir ListObject.Tüm Windows Forms denetimleri de kaldırılır ama denetimler için ActiveX kapsayıcıları belgede kalır.Denetimleri temizlemek için veya belge bir kez daha açıldığında denetimleri yeniden oluşturmak için eklentinize kod eklemelisiniz.Daha fazla bilgi için bkz. Office Belgelerinde Dinamik Denetimleri Kalıcı Kılma.

Belge veya Çalışma Kitaplarındaki Uygulama Düzeyi Olaylarına Erişim

Yerel Word ve Excel nesne modellerindeki bazı belge, çalışma kitavı ve çalışma sayfası olayları sadece uygulama düzeyinde başlatılır.Örneğin, DocumentBeforeSave olayı Word'de belge açıldığında oluşur ama bu olay Document sınıfı yerine Application sınıfında tanımlanır.

Eklentinizde sadece yerel Office nesneleri kullandığınızda, bu uygulama düzeyi olaylarını işlemelisiniz ve ardından olay yaratan belgenin sizin özelleştirdiğiniz olan belge olup olmadığına kara vermek için ek kod yazmalısınız.Konak öğeleri bu olayları belge düzeyinde sunar, böylelikle özel bir belge için olayları işlemek daha kolay olur.Konak öğesi yaratıp ardından da o konak öğesi için olayı işleyebilirsiniz.

Yerel Word Nesneleri Kullanan Örnek

Aşağıdaki kod örneğinde, Word belgelerinde uygulama düzeyi olayının nasıl işlendiği gösterilmiştir.CreateDocument yöntemi yeni belge oluşturur ve ardından bu belgenin kaydedilmesini engelleyen DocumentBeforeSave olay işleyicisi tanımlar.Application nesnesi için oluşan uygulama düzeyi olayı olduğu için, olay işleyicisi, document1'in kaydedilmiş belgeyi temsil edip etmediğine karar vermek için Doc parametresiyle document1 nesnesini karşılaştırmalı.

Private document1 As Word.Document = Nothing 

Private Sub CreateDocument1()
    document1 = Me.Application.Documents.Add()
End Sub 

Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _
    ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) _
    Handles Application.DocumentBeforeSave
    If Type.ReferenceEquals(Doc, document1) Then
        Cancel = True 
    End If 
End Sub
private Word.Document document1 = null;

private void CreateDocument1()
{
    document1 = this.Application.Documents.Add(ref missing,
        ref missing, ref missing, ref missing);
    this.Application.DocumentBeforeSave += 
        new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
        Application_DocumentBeforeSave);
}

private void Application_DocumentBeforeSave(Word.Document Doc, 
    ref bool SaveAsUI, ref bool Cancel)
{
    if (Type.ReferenceEquals(Doc, document1)) 
    {
        Cancel = true;
    }
}

Konak Öğesi Kullanan Örnekler

Aşağıdaki kod örneklerinde, Document konak öğesinin BeforeSave olayı işlenerek bu işlem kolaylaştırılmıştır.Bu örneklerdeki CreateDocument2 yöntemi, document2 nesnesini genişleten Document yaratır ve belgenin kaydedilmesini engelleyen BeforeSave olay işleyicisini genişletir.Bu olay işleyicisi sadece document2 kaydedildiğinde çağrıldığı için, olay işleyicisi hangi belgenin kaydedildiğini kanıtlamak için ek iş yapmadan kaydetme eylemini iptal edebilidir.

Aşağıdaki kod örneği, bu görevi gösterir.

Private document2 As Word.Document = Nothing 
Private WithEvents vstoDocument As Microsoft.Office.Tools.Word.Document = Nothing 

Private Sub CreateDocument2()
    document2 = Me.Application.Documents.Add()
    vstoDocument = Globals.Factory.GetVstoObject(document2)
End Sub 

Private Sub vstoDocument_BeforeSave(ByVal sender As Object, _
    ByVal e As SaveEventArgs) Handles vstoDocument.BeforeSave
    e.Cancel = True 
End Sub
private Word.Document document2 = null;
private Microsoft.Office.Tools.Word.Document vstoDocument = null;

private void CreateDocument2()
{
    document2 = this.Application.Documents.Add(ref missing,
        ref missing, ref missing, ref missing);
    vstoDocument = Globals.Factory.GetVstoObject(document2);
    vstoDocument.BeforeSave += new SaveEventHandler(vstoDocument_BeforeSave);
}

private void vstoDocument_BeforeSave(object sender, SaveEventArgs e)
{
    e.Cancel = true;
}

Office Nesnesinin Genişletilip Genişletilmediğine Karar Verme

Genişletilmiş nesnenin, belirli bir yerel Office nesnesi için yaratılıp yaratılmadığına karar vermek için, HasVstoObject yöntemini kullanın.Genişletilmiş nesne önceden yaratılmışa bu yöntem true döner, yoksa false döner.

Globals.Factory.HasVstoMethod yöntemini kullanın.Doğal Word veya Excel nesnesi gibi geçmesi bir Document veya Worksheet, genişletilmiş bir nesne için sınamak istediğiniz.

HasVstoObject yöntemi, sadece belli Office nesnesi genişletilmiş bir nesneye sahip olduğunda kodu çalıştırmak istediğinizde yaralıdır.Örneğin, belge kaydedilmeden önce yönetilen denetimleri kaldırmak için DocumentBeforeSave olayını işleyen Word eklentiniz varsa, belgenin genişletilip genişletilmediğine karar vermek için HasVstoObject yöntemini kullanabilirsiniz.Eğer belge genişletilmemişse, yönetilen denetimler içeremez ve böylece olay işleyicisi belgedeki denetimleri temizlemeden kolaylıkla döner.

Ayrıca bkz.

Kavramlar

Office Belgelerine Çalışma Zamanında Denetim Ekleme

Ana Bilgisayar Öğelerine ve Denetimlerine Genel Bakış

Diğer Kaynaklar

Uygulama Düzeyi Eklentileri Programlama

Office Geliştirme Örnekleri ve İzlenecek Yollar