Aracılığıyla paylaş


Uygulama Düzeyi Eklentilerinde Diğer Office Çözümlerinden Kod Çağırma

Eklenti, diğer Microsoft Office çözümleri dahil olmak üzere, diğer çözümler için bir nesne getirebilir.Eklentinizi kullanmak diğer çözümleri etkinleştirmek istediğiniz bir hizmet sağlar, bu yöntem kullanışlıdır.Microsoft Office Excel, bir Web hizmetinden finansal veriler üzerinde hesaplamaları gerçekleştiren bir eklenti sahip, örneğin, diğer çözümleri bu hesaplamalar çağırarak Excel eklentisi çalışma zamanında gerçekleştirebilirsiniz.

Uygulama hedefi: Bu konudaki bilgiler, Microsoft Office 2013 ve Microsoft Office 2010 için uygulama düzeyi projelere yöneliktir. Daha fazla bilgi edinmek için, bkz. Office Uygulaması ve Proje Türüne Göre Kullanılabilir Özellikler.

Bu işlemde iki ana adım vardır:

  • Eklentinizi içinde diğer çözümleri nesneye ortaya çıkarır.

  • Başka bir çözümde, eklenti ve nesne araması üyeleri tarafından oluşturulan nesneye erişin.

Kod bir eklenti içinde çağırabilirsiniz çözüm türleri

Çözüm aşağıdaki türleri için bir eklenti bir nesnedeki getirebilir:

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

  • Aynı uygulama işleminde yüklenen belge düzeyi özelleştirmeler.

  • Diğer Office proje şablonları Visual Studio'da kullanılarak oluşturulan eklentileri.

  • COM eklentileri (yani, uygulayan eklentileri IDTExtensibility2 doğrudan arabirim).

  • Eklentinizi değerinden farklı bir işlemde çalıştıran herhangi bir çözüm (Bu tür çözümler olarak da adlandırılır işlemi istemcileri).Bunlar, Windows Forms gibi bir Office uygulama veya konsol uygulaması ve farklı bir işlemde yüklenen eklentiler otomatikleştiren uygulamaları içerir.

Diğer çözümleri nesnelere kullanıma sunan

Bir nesnede eklentinizi diğer çözümlerine kullanıma sunmak için eklentinizi içinde aşağıdaki adımları gerçekleştirin:

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

  2. Geçersiz kılma RequestComAddInAutomationService yönteminde ThisAddIn sınıfı.Diğer çözümleri oluşturmak istediğiniz sınıfının bir örneğini döndürür.

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

En azından istediğiniz kullanıma sunmak için sınıf ortak olmalıdır, olması gerekir ComVisibleAttribute özniteliğini true, ve bunu sunun IDispatch arabirimi.

Kullanıma sunmak için önerilen yol IDispatch arabirimdir için aşağıdaki adımları gerçekleştirin:

  1. Diğer çözümleri oluşturmak istediğiniz üyeleri bildiren bir arabirim tanımlayın.Bu arabirim eklenti projenizde tanımlayabilirsiniz.Ancak, böylece eklentinizi çağrısı çözümleri Eklenti projenizi başvurulmadan arabirimi başvurabilirsiniz VBA olmayan çözümlerine sınıfı kullanıma sunmak istiyorsanız, bu arabirim bir ayrı sınıf kitaplığı projesinde tanımlamak isteyebilirsiniz.

  2. Uygulama ComVisibleAttribute özniteliği bu arabirime ve bu öznitelik kümesine true.

  3. Bu arabirim uygulamak için sınıf değiştirin.

  4. Uygulama ClassInterfaceAttribute öznitelik sınıfı ve bu öznitelik kümesine None değerini ClassInterfaceType numaralandırması.

  5. İşlem dışı istemcilere sınıfı oluşturmak istiyorsanız, aşağıdakileri gerekebilir:

    • Sınıfından türetilen StandardOleMarshalObject.Daha fazla bilgi için kullanıma sunan sınıfları işlem dışı istemcilere.

    • Ayarlama kaydetmek için COM ile birlikte arabirimi tanımladığınız projesinde özelliği.Erken bağlama eklenti çağırmak için kullanılacak istemcileri etkinleştirmek istiyorsanız, bu gereklidir.

Aşağıdaki kod örneğinde gösterilmektedir bir AddInUtilities ile bir ImportData diğer çözümleri tarafından çağrılan yöntemi.Bu kodu daha geniş bir anlatım bağlamında görmek için bkz İzlenecek Yol: Uygulama Düzeyi Eklentide VBA'dan Kod Ç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 için sınıflarını

Yukarıda verilen adımları gerçekleştirirken VBA kodunu arabiriminde size bildiren yöntemleri çağırabilirsiniz.VBA kodu Sınıfınız temel sınıflar gibi alır yöntemler dahil olmak üzere sınıfınızda diğer yöntemleri çağıramaz Object.

Bunun yerine getirebilir IDispatch ayarlayarak arabirimi ClassInterfaceAttribute özniteliğini AutoDispatch veya AutoDual değerini ClassInterfaceType numaralandırması.Bunu, ayrı bir arabirimi yöntemlerinde bildirmek gerekmez.Ancak, herhangi bir ortak ve statik olmayan yöntemleri temel sınıflar gibi elde edilen yöntemler de dahil olmak üzere sınıfınızda VBA kodunu çağırabilirsiniz Object.Ayrıca, erken bağlama kullanan işlem dışı istemciler sınıfınız çağrılamaz.

İşlem dışı istemcilere sınıflarını

Eklentinizi işlem dışı istemcilere bir sınıfta oluşturmak istiyorsanız, sınıfından türetilen StandardOleMarshalObject işlemi istemcileri gösterilen, eklenti nesnesi çağırdığınızdan emin olmak için.Aksi takdirde, gösterilen nesnesinin bir örneğini bir işlem dışı istemcisinde almaya çalışır beklenmedik şekilde çalışmayabilir.

Bu nesne modeli Office uygulamasının yapılan tüm çağrıların ana kullanıcı Arabirimi iş parçacığı üzerinde yapılmalıdır, ancak, nesne için bir işlem dışı istemci gelen çağrıları rastgele bir RPC (uzaktan yordam çağrısı) iş parçacığına ulaşır olmasıdır..NET Framework içindeki COM hazırlama mekanizması dizileri geçin değil ve bunun yerine, nesne ana kullanıcı Arabirimi iş parçacığı yerine gelen RPC iş parçacığı üzerinde çağrısı sıralamakta deneyecektir.Türetilen bir sınıf örneği, nesne olup olmadığını StandardOleMarshalObject, gelen çağrıları, nesne için otomatik olarak konak uygulamasının ana UI iş parçacığı olacağı Burada sunulan nesnenin oluşturulduğu iş parçacığına sıralanmış.

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

RequestComAddInAutomationService yöntemini geçersiz kılma

Aşağıdaki kod örneğinde, geçersiz kılmak nasıl kullanılacağını göstermektedir RequestComAddInAutomationService içinde ThisAddIn eklentinizi sınıfta.Bu örnekte, adında bir sınıfı tanımladığınız varsayılır AddInUtilities diğer çözümleri oluşturmak istediğiniz.Bu kodu daha geniş bir anlatım bağlamında görmek için bkz İzlenecek Yol: Uygulama Düzeyi Eklentide VBA'dan Kod Ç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;
}

Eklentinizi yüklendiğinde, Office çalışma zamanı için Visual Studio Araçları çağrıları RequestComAddInAutomationService yöntemi.Döndürülen nesne için çalışma zamanı atar Object özelliği bir COMAddIn eklentinizi temsil eden nesne.Bu COMAddIn nesnesidir diğer Office çözümleri ve otomatikleştirmek Office çözümleri için kullanılabilir.

Nesneleri diğer çözümlerinden erişme

Eklentinizi içinde gösterilen nesne çağırmak için istemci çözümünde aşağıdaki adımları gerçekleştirin:

  1. Al COMAddIn oluşturulan eklentiyi temsil eden nesne.İstemciler erişim tüm kullanılabilir add-INS kullanarak Application.COMAddIns özelliği, Office uygulama ana bilgisayarı nesne modeli.

  2. Erişim Object özelliği COMAddIn nesne.Bu özellik, eklentiyi gösterilen nesne döndürür.

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

Dönüş değerini kullandığınız şekilde COMAddIn.Object özelliği, VBA ve VBA olmayan istemciler için farklıdır.İşlem dışı istemciler için ek kod olası yarış durumu önlemek gereklidir.

Nesnelere VBA çözümlerinden erişme

Aşağıdaki kod örneğinde VBA eklenti tarafından sunulan yöntemini çağırmak için nasıl kullanılacağını gösterir.Bu VBA makro adında bir yöntemi çağırır ImportData adlı eklenti içinde tanımlanan ExcelImportData.Bu kodu daha geniş bir anlatım bağlamında görmek için bkz İzlenecek Yol: Uygulama Düzeyi Eklentide VBA'dan Kod Ç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ümlerinden erişme

VBA olmayan bir çözümde, cast gerekir COMAddIn.Object özellik değerini arabirimine bunu uygular ve ardından arayüz nesnesi üzerinde gösterilen yöntemleri çağırabilirsiniz.Aşağıdaki kod örneğinde nasıl çağrılacağını gösterir ImportData bir farklı Visual Studio'daki Office geliştirici araçları kullanılarak oluşturulan eklentisi yönteminden.

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ğerini cast çalışırsanız, bu örnekte, COMAddIn.Object özelliğini AddInUtilities sınıfı yerine IAddInUtilities arabirimi, kod oluşturur bir InvalidCastException.

Ayrıca bkz.

Görevler

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

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

Kavramlar

Uygulama Düzeyi Eklentileri Mimarisi

Genişletilebilirlik Arabirimlerini Kullanarak Kullanıcı Arabirimi Özelliklerini Özelleştirme

Diğer Kaynaklar

Uygulama Düzeyi Eklentileri Programlama

Office Çözümleri Geliştirme