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 2010 ve 2007 Microsoft Office sisteminin 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ümleri sergilemek istediğiniz sınıfının bir örneğini döndürür.

Diğer çözümleri sergilemek istediğiniz sınıfını tanımlama

En azından, göstermek istediğiniz sınıfın ortak olmalıdır, olması gerekir ComVisibleAttribute özniteliğini ayarlamak true, ve göstermek gerekir IDispatch arabirimi.

Göstermek için önerilen yol IDispatch arabirimidir aşağıdaki adımları gerçekleştirmek için:

  1. Diğer çözümleri sergilemek istediğiniz üyeleri bildirir bir arabirimi tanımlar. Bu arabirimi eklenti projenizi tanımlayabilirsiniz. Ancak, böylece eklenti arama çözümleri Arabirimi eklentisi proje başvurulmadan başvurabilirsiniz vba olmayan çözümler sınıfına göstermek istiyorsanız, ayrı bir sınıf kitaplığı projede 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ışı istemcilere göstermek istiyorsanız, aşağıdakileri yapmanız gerekebilir:

Aşağıdaki kod örneği gösterir bir AddInUtilities ile sınıf bir ImportData yöntemi, arayan diğer çözümleri. Bu kodu daha geniş bir anlatım bağlamında görmek için, bkz. İzlenecek Yol: Uygulama Düzeyi Eklentilerindeki Kodu VBA'dan Çağırma.

<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";
        }
    }
}

vba sınıflara sunduğu

Yukarıda verilen adımları gerçekleştirdiğinizde, vba kodu arabiriminde yalnızca 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.

Bunun yerine getirebilir IDispatch ayarlayarak arabirim ClassInterfaceAttribute için öznitelik 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ışı istemciler sınıfınızın çağrılamıyor.

İşlem dışı istemcilere sınıfları çıkarılması

Eklentiniz işlem dışı istemcilere bir sınıfta göstermek isterseniz, sınıf türetin StandardOleMarshalObject için sağlamak, işlem dışı istemcilere çağırabilir, sunulan eklenti nesnesi. 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.

RequestComAddInAutomationService yöntemi geçersiz kılma

Aşağıdaki kod örneği, geçersiz kılmak gösterilmiştir RequestComAddInAutomationService , ThisAddIn sizin eklemek inç sınıfında 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: Uygulama Düzeyi Eklentilerindeki Kodu VBA'dan Çağırma.

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, Visual Studio Tools for Office ç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. İstemciler erişebilir tüm kullanılabilir eklentiler kullanarak Application.COMAddIns özelliği nesne modelinde ana bilgisayarın Office uygulama.

  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.

Nesnelere 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: Uygulama Düzeyi Eklentilerindeki Kodu VBA'dan Çağırma.

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

Nesnelere 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ği çağrı gösterilmiştir ImportData bir farklı eklentisi, Office Geliştirici Araçları kullanılarak oluşturulan yöntemindenVisual Studio.

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();

Değeri artığını denerseniz, bu örnekte, COMAddIn.Object özelliğine AddInUtilities sınıfı yerine IAddInUtilities , kod arabirimi, throw bir InvalidCastException.

Ayrıca bkz.

Görevler

İzlenecek Yol: Uygulama Düzeyi Eklentilerindeki Kodu VBA'dan Çağırma

Nasıl Yapılır: Visual Studio'da Office Projeleri Oluşturma

Kavramlar

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

Uygulama Düzeyi Eklentisi Mimarisi

Diğer Kaynaklar

Uygulama Düzeyi Eklentileri Programlama

Office Çözümlerini Geliştirme

Değişiklik Geçmişi

Tarih

Geçmiş

Nedeni

Eylül 2010

Geliştirilmiş Kuruluş içerik ve kaldırılan yedek bilgilerin.

Bilgi geliştirme.