Comment utiliser des propriétés indexées dans la programmation COM Interop

Les propriétés indexées fonctionnent avec d’autres fonctionnalités dans C#, comme les arguments nommés et facultatifs, un nouveau type (dynamique) et les informations de type incorporées, pour améliorer la programmation Microsoft Office.

Important

VSTO (Visual Studio Tools pour Office) s’appuie sur .NET Framework. Les compléments COM peuvent également être écrits avec .NET Framework. Les compléments Office ne peuvent pas être créés avec .NET Core et .NET 5+, les dernières versions de .NET. En effet, .NET Core et .NET 5+ ne peuvent pas fonctionner avec .NET Framework dans le même processus, et cela peut entraîner des échecs de chargement des compléments. Vous pouvez continuer d’utiliser .NET Framework pour écrire des compléments VSTO et COM pour Office. Microsoft ne mettra pas à jour VSTO ou la plateforme de compléments COM pour utiliser .NET Core ou .NET 5+. Vous pouvez utiliser .NET Core et .NET 5+, dont ASP.NET Core, pour créer le côté serveur des compléments web Office.

Dans les versions antérieures de C#, les méthodes sont accessibles comme des propriétés uniquement si la méthode get n’a aucun paramètre et que la méthode set a un seul et unique paramètre de valeur. Toutefois, toutes les propriétés COM ne respectent pas ces restrictions. Par exemple, la propriété Range[] d’Excel a un accesseur get, qui nécessite un paramètre pour le nom de la plage. Dans le passé, parce que vous ne pouviez pas accéder à la propriété Range directement, vous deviez utiliser la méthode get_Range à la place, comme indiqué dans l’exemple suivant.

// Visual C# 2008 and earlier.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);

Les propriétés indexées vous permettent d’écrire ce qui suit à la place :

// Visual C# 2010.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.Range["A1"];

L’exemple précédent utilise également la fonctionnalité des arguments facultatifs, qui vous permet d’omettre Type.Missing.

Les propriétés indexées vous permettent d’écrire le code suivant.

// Visual C# 2010.
targetRange.Value = "Name";

Vous ne pouvez pas créer vos propres propriétés indexées. La fonctionnalité prend uniquement en charge la consommation de propriétés indexées existantes.

Exemple

L'exemple de code suivant illustre l'exemple complet. Pour plus d’informations sur la configuration d’un projet qui accède à l’API Office, consultez Comment accéder aux objets Office Interop à l’aide des fonctionnalités C#.

// You must add a reference to Microsoft.Office.Interop.Excel to run
// this example.
using System;
using Excel = Microsoft.Office.Interop.Excel;

namespace IndexedProperties
{
    class Program
    {
        static void Main(string[] args)
        {
            CSharp2010();
        }

        static void CSharp2010()
        {
            var excelApp = new Excel.Application();
            excelApp.Workbooks.Add();
            excelApp.Visible = true;

            Excel.Range targetRange = excelApp.Range["A1"];
            targetRange.Value = "Name";
        }

        static void CSharp2008()
        {
            var excelApp = new Excel.Application();
            excelApp.Workbooks.Add(Type.Missing);
            excelApp.Visible = true;

            Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);
            targetRange.set_Value(Type.Missing, "Name");
            // Or
            //targetRange.Value2 = "Name";
        }
    }
}

Voir aussi