Aracılığıyla paylaş


Uygulama Düzeyi Eklentilerindeki Kodu Başka Office Çözümlerinden Çağırma

Eklenti nesnesini, diğer Microsoft Office çözümleri dahil olmak üzere başka çözümlerle oluşturabilirsiniz.Eğer eklentiniz, diğer çözümlerin kullanması için etkinleştirmek istediğiniz bir hizmet sağlıyorsa, bu yararlıdır.Örneğin, Microsoft Office Excel için Web sunucusundan finansal veri üzerine hesaplamalar gerçekleştiren eklentiniz varsa, diğer çözümler bu çözümleri çalışma zamanında Excel eklentisini çağırarak gerçekleştirebilir.

Uygulama alanı: Bu konudaki bilgiler Microsoft Office 2013 ve Microsoft Office 2010'un uygulama düzeyi projelerine yöneliktir. Daha fazla bilgi için bkz. Office Uygulamalarında Kullanılabilir Özellikler ve Proje Türü.

Bu işlemde 2 ana basamak vardır:

  • Eklentinizde, bir nesneyi diğer Microsoft Office çözümleriyle oluşturun.

  • Diğer bir çözümde, eklentiniz tarafından oluşturulan nesneye erişin ve o nesnenin üyelerini çağırın.

Eklentide Kod Çağırabilen Çözüm Türleri

Eklentinizdeki bir nesneyi, aşağıdaki çözüm türlerinde oluşturabilirsiniz:

  • Eklentinizle aynı uygulama işleminde yüklenen belgedeki Visual Basic for Applications (VBA) kodu.

  • Eklentinizle aynı uygulama işleminde yüklenen belge düzeyi özelleştirmeleri.

  • Visual Studio'daki Office proje şablonları kullanarak oluşturulan diğer eklentiler.

  • COM eklentileri (IDTExtensibility2 arayüzünü doğrudan uygulayan eklentiler)

  • Eklentinizden farklı bir işlemde çalışan herhangi bir çözüm (bu tür çözümler işlem dışı istemciler olarak da adlandırılır).Bu, Office uygulamasını otomatikleştiren uygulamaları içerir, örn. Windows Forms veya konsol uygulaması ve farklı bir işlemde yüklenen eklentiler.

Nesneleri Diğer Office Çözümlerinde Oluşturma

Eklentinizdeki bir nesneyi, başka çözümlerde oluşturmak için eklentinizde aşağıdaki adımları gerçekleştirin.

  1. Diğer çözümlerinizde oluşturmak istediğiniz bir sınıf tanımlayın.

  2. ThisAddIn sınıfındaki RequestComAddInAutomationService yöntemini geçersiz kılın.Diğer çözümlerinizde oluşturmak istediğiniz sınıfının bir örneğini döndürün.

Bb608621.collapse_all(tr-tr,VS.110).gifDiğer çözümlerinizde oluşturmak istediğiniz sınıfı tanımlama

En azından sergilemek istediğiniz sınıfın public olmalıdır, olması gerekir ComVisibleAttribute özniteliğini ayarlamak true, ve sergilemek gerekir IDispatch arabirim.

VBA'de ortaya çıkarmak için önerilen yol IDispatch arabirimi olduğu için aşağıdaki adımları uygulayın:

  1. Diğer çözümlerinizde oluşturmak istediğiniz üyeleri bildiren bir arayüz tanımlayın.Bu arabirimi eklenti projenizde tanımlayabilirsiniz.Ancak, eklentiniz arama çözümleri Arabirimi Eklenti projenizi başvurulmadan başvurabilir, vba olmayan çözümlerde sınıfı istiyorsanız, ayrı bir sınıf kitaplığı projesinde bu arabirimi tanımlamak isteyebilirsiniz.

  2. ComVisibleAttribute özniteliğini bu arayüze uygulayın ve bu özniteliği true olarak ayarlayın.

  3. Bu arayüzü uygulamak için sınıfınızı değiştirin.

  4. Sınıfa ClassInterfaceAttribute özniteliğini uygulayın ve bu özniteliği, ClassInterfaceType sabit listesinin None değerine ayarlayın.

  5. Sınıf işlem dışı istemcilerde oluşturmak istiyorsanız, aşağıdakileri yapmanız gerekebilir:

    • Sınıfından türetilen StandardOleMarshalObject.Daha fazla bilgi için bkz: İşlem dışı istemcilerde sınıfları VBA'de ortaya.

    • Set com birlikte çalışma için kaydol arabirimini tanımlamak burada projesinde özelliği.Bu yalnızca erken bağlama çağırın istemcilerin etkinleştirmek istiyorsanız gereklidir.Daha fazla bilgi için bkz. Derleme özelliklerini yönetme.

Aşağıdaki kod örneği gösterir bir AddInUtilities ile sınıf bir ImportData diğer çözümleri tarafından çağrılacak yöntemi.Bu kodu daha geniş bir anlatım bağlamında görmek için, bkz. İzlenecek yol: Arama kod içinde bir uygulama düzeyinde eklentisini vba.

<ComVisible(True)> _
Public Interface IAddInUtilities
    Sub ImportData()
End Interface

<ComVisible(True)> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class AddInUtilities
    Implements IAddInUtilities

    ' This method tries to write a string to cell A1 in the active worksheet.
    Public Sub ImportData() Implements IAddInUtilities.ImportData

        Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet

        If activeWorksheet IsNot Nothing Then
            Dim range1 As Excel.Range = activeWorksheet.Range("A1")
            range1.Value2 = "This is my data"
        End If
    End Sub
End Class
[ComVisible(true)]
public interface IAddInUtilities
{
    void ImportData();
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddInUtilities : IAddInUtilities
{
    // This method tries to write a string to cell A1 in the active worksheet.
    public void ImportData()
    {
        Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;

        if (activeWorksheet != null)
        {
            Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
            range1.Value2 = "This is my data";
        }
    }
}

Bb608621.collapse_all(tr-tr,VS.110).gif Sınıfları VBA'de ortaya çıkarma

Yukarıda verilen adımları gerçekleştirdiğinizde, vba kodunu arayüzde bildirdiğiniz yöntemleri çağırabilir.VBA kodu, Object gibi sınıfınızın temel sınıflardan edindiği yöntemler dahil olmak üzere sınıfınızdaki diğer yöntemleri çağıramaz.

Alternatif olarak ortaya IDispatch ayarlayarak arabirim ClassInterfaceAttribute özniteliğini AutoDispatch veya AutoDual değeri ClassInterfaceType numaralandırma.Eğer bunu yaparsanız, ayrı bir arayüzde yöntemleri bildirmenize gerek yoktur.Fakat, VBA kodu, Object gibi temel sınıflardan elde edilen yöntemler de dahil olmak üzere sınıfınızdaki ortak ve statik olmayan yöntemleri çağırabilir.Buna ek olarak, erken bağlama kullanan işlem dışı istemcilerde sınıfınızın çağıramazsınız.

Bb608621.collapse_all(tr-tr,VS.110).gifİşlem dışı istemcilerde sınıfları VBA'de ortaya

Bir sınıf içinde eklentinizi işlem dışı istemcilerde oluşturmak istiyorsanız, bu sınıftan türetilmelidir StandardOleMarshalObject işlem dışı istemcilerde eklenti nesnenizin çağırabilirsiniz emin olmak için.Aksi halde, işlem dışı istemcilerde oluşturulan nesnenizin bir olgusunu alma denemeleri beklenmedik şekilde çalışmayabilir.

Bunun nedeni, Office uygulamasının nesne modeline yapılan tüm çağrıların, ana UI iş parçacığında yapılıyor olmasıdır, ama işlem dışı istemcilerden nesnenize yapılan çağrılar rasgele RPC (uzak yordam çağrısı) iş parçacığına ulaşır..NET Framework içindeki COM hazırlama mekanizması iş parçacıklarında geçiş yapmaz ve ana UI iş parçacığı yerine gelen RPC iş parçacığındaki nesnenize olan çağyırı hazırlamayı dener.Eğer nesneniz, StandardOleMarshalObject'den türetilen bir sınıfın olgusuysa, nesnenize gelen çağrılar, konak uygulamasının ana UI iş parçacığı olan nesnenin oluşturulduğu iş parçacığına otomatik olarak hazırlanır.

Office çözümlerinde iş parçacığı kullanma hakkında daha fazla bilgi için bkz. Office'te İş Parçacığı Desteği.

Bb608621.collapse_all(tr-tr,VS.110).gifRequestComAddInAutomationService yöntemini geçersiz kılma

Aşağıdaki kod örneğinde nasıl geçersiz kılınacağı gösterilmektedir RequestComAddInAutomationService , ThisAddIn eklenti sınıfı.Bu örnekte, diğer çözümlerde oluşturmak istediğiniz, AddInUtilities adında bir sınıfı tanımladığınız varsayılır.Bu kodu daha geniş bir anlatım bağlamında görmek için, bkz. İzlenecek yol: Arama kod içinde bir uygulama düzeyinde eklentisini vba.

Private utilities As AddInUtilities

Protected Overrides Function RequestComAddInAutomationService() As Object
    If utilities Is Nothing Then
        utilities = New AddInUtilities()
    End If
    Return utilities
End Function
private AddInUtilities utilities;

protected override object RequestComAddInAutomationService()
{
    if (utilities == null)
        utilities = new AddInUtilities();

    return utilities;
}

Eklentiniz yüklendiğinde, Office için Visual Studio Araçları çalışma zamanı modülü, RequestComAddInAutomationService yöntemini çağırır.Çalışma zamanı, dönme nesnesini, eklentinizi temsil eden COMAddIn nesnesinin Object özelliğine atar.Bu COMAddIn nesnesi diğer Office çözümlerinde ve Office'i otomatikleştiren çözümlerde kullanılabilir.

Nesnelere Diğer Office Çözümlerinden Erişme

Eklentinizde oluşan bir nesneyi çağırmak için, aşağıdaki adımları istemci çözümünde gerçekleştirin.

  1. Oluşturulan eklentiyi temsil eden COMAddIn nesnesini alın.İstemcilerin erişim tüm kullanılabilir eklentiler kullanarak Application.COMAddIns ana Office uygulamasının nesne modelindeki özelliği.

  2. COMAddIn nesnesinin Object özelliğine erişin.Bu özellik, eklentiden oluşturulan nesneyi döner.

  3. Oluşturulan nesnenin üyelerini çağırın.

COMAddIn.Object özelliğinin dönüş değerini kullandığınız yol, VBA ve VBA olmayan istemciler için farklıdır.İşlem dışı istemciler için, yarış durumundan sakınmak amacıyla ek kod gereklidir.

Bb608621.collapse_all(tr-tr,VS.110).gifNesnelere VBA Çözümlerinden Erişme

Aşağıdaki kod örneğinde, eklenti tarafından oluşturulan bir yöntemin çağrılması için VBA'in nasıl kullanıldığı gösterilmektedir.Bu VBA makrosu, ExcelImportData isimli eklentide tanımlanan, ImportData adında bir yöntemi çağırır.Bu kodu daha geniş bir anlatım bağlamında görmek için, bkz. İzlenecek yol: Arama kod içinde bir uygulama düzeyinde eklentisini vba.

Sub CallVSTOMethod()
    Dim addIn As COMAddIn
    Dim automationObject As Object
    Set addIn = Application.COMAddIns("ExcelImportData")
    Set automationObject = addIn.Object
    automationObject.ImportData
End Sub

Bb608621.collapse_all(tr-tr,VS.110).gifNesnelere VBA Olmayan Çözümlerden Erişme

VBA olmayan çözümlerde, COMAddIn.Object özellik değerini, uyguladığı arayüze dönüştürmelisiniz ve ardından arayüz nesnesi üzerinde oluşturlan yöntemleri çağırabilirsiniz.Aşağıdaki kod örneğinde nasıl çağrılacağını gösterir ImportData yöntemi eklentisinden bir farklı Visual Studio'daki Office geliştirme araçları kullanılarak oluşturulmuş.

Dim addIn As Office.COMAddIn = Globals.ThisAddIn.Application.COMAddIns.Item("ExcelImportData")
Dim utilities As ExcelImportData.IAddInUtilities = TryCast( _
    addIn.Object, ExcelImportData.IAddInUtilities)
utilities.ImportData()
object addInName = "ExcelImportData";
Office.COMAddIn addIn = Globals.ThisAddIn.Application.COMAddIns.Item(ref addInName);
ExcelImportData.IAddInUtilities utilities = (ExcelImportData.IAddInUtilities)addIn.Object;
utilities.ImportData();

Bu örnekte, değeri denerseniz, COMAddIn.Object özelliğini AddInUtilities sınıfı yerine IAddInUtilities arabirimi, kod durum bir InvalidCastException.

Ayrıca bkz.

Görevler

İzlenecek yol: Arama kod içinde bir uygulama düzeyinde eklentisini vba

Nasıl yapılır: Visual Studio Office projeler oluşturmak

Kavramlar

Uygulama Düzeyi Eklentisi Mimarisi

Genişletilebilirlik Arabirimi Kullanarak Kullanıcı Arabirimi (KA) Özelliklerini Özelleştirme

Diğer Kaynaklar

Uygulama Düzeyi Eklentileri Programlama

Office Çözümlerini Geliştirme