Freigeben über


Gewusst wie: Sicherstellen der richtigen regionalen Verwendung von Zeichenfolgenliteralen in Excel mithilfe der Reflektion

In Office-Projekten zeigt Excel gebietsschemaabhängige Datenzeichenfolgen ordnungsgemäß an, wenn Sie die Zeichenfolgen im Projekt als Englisch (USA) formatieren. Sie können dieses Verhalten in einem Office-Projekt, für das als Zielversion das .NET Framework 3.5 festgelegt ist, ändern, indem Sie Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute auf false festlegen. Wenn Sie jedoch die Zeichenfolgenliterale nach dem Ändern des Attributs an Excel übergeben, wird automatisch die aktuelle LCID des Threads verwendet, und die Daten werden möglicherweise falsch formatiert. Weitere Informationen finden Sie unter Formatieren von Daten in Excel mit verschiedenen regionalen Einstellungen.

Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokument- und auf Anwendungsebene für Excel 2007 und Excel 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.

Wenn Sie Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute in einem Office-Projekt, für das als Zielversion .NET Framework 3.5 festgelegt wurde, auf false festlegen, können Sie mithilfe von Reflektion erzwingen, dass für bestimmte Aufrufe von Eigenschaften und Methoden von Excel-Objekten das Datenformat Englisch (USA) (Gebietsschema-ID 1033) verwendet werden soll. In diesem Fall können Sie die Formatierung Englisch (USA) für alle Zeichenfolgen verwenden, die an die Eigenschaft oder die Methode übergeben werden, und der Code funktioniert in allen Gebietsschemas ordnungsgemäß.

In den folgenden Beispielen wird veranschaulicht, wie eine Eigenschaft eines NamedRange-Steuerelements in einem Projekt auf Dokumentebene für Excel festgelegt oder abgerufen wird, doch die gleichen Konzepte sind auch für Excel-Objekte in Projekten auf Anwendungsebene gültig.

So legen Sie mit Reflektion eine Eigenschaft in einem Excel-Bereich fest

  1. Erstellen Sie eine Hilfsmethode, in der die InvokeMember-Methode zum Festlegen eines Eigenschaftswerts eines Excel-Objekts verwendet wird. Schließen Sie Parameter für das Excel-Objekt, den Eigenschaftennamen und die Parameter der Eigenschaft ein. Verwenden Sie in der Hilfsmethode eine InvokeMember-Überladung, die über einen CultureInfo-Parameter verfügt, und übergeben Sie die Gebietsschema-ID für Englisch (USA) an diesen Parameter.

    Shared Function SetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.SetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object SetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new
            System.Globalization.CultureInfo(1033));
    }
    
  2. Erstellen Sie ein NamedRange-Steuerelement in Zelle A5, und nennen Sie es NamedRange1.

    Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _
        Me.Controls.AddNamedRange(Me.Range("A5"), "NamedRange1")
    
    Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
        this.Controls.AddNamedRange(this.Range["A5", missing], "NamedRange1");
    
  3. Anstatt die Formula-Eigenschaft von NamedRange1 direkt festzulegen, rufen Sie die SetPropertyInternational-Hilfsmethode auf, und übergeben Sie das zu Grunde liegende Range-Objekt für das NamedRange-Steuerelement, den Eigenschaftennamen und den Wert.

    Tipp

    Sie können das NamedRange-Steuerelement nicht direkt übergeben. Stattdessen muss das zu Grunde liegende Range-Objekt in Excel mit der InnerObject-Eigenschaft abgerufen werden, bevor das Objekt an die Methode übergeben wird. Weitere Informationen finden Sie unter Programmgesteuerte Einschränkungen von Hostelementen und Hoststeuerelementen.

    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
    
    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
    

So rufen Sie mit Reflektion einen Eigenschaftswert aus einem Excel-Bereich ab

  1. Erstellen Sie eine Hilfsfunktion, die die InvokeMember-Methode verwendet, um einen Eigenschaftswert eines Excel-Objekts abzurufen. Das Objekt, der Eigenschaftenname und die Parameter der Eigenschaft werden an die Hilfsmethode übergeben.

    Shared Function GetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.GetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object GetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new 
            System.Globalization.CultureInfo(1033));
    }
    
  2. Rufen Sie die GetPropertyInternational-Funktion auf, und übergeben Sie ihr NamedRange und den Eigenschaftennamen.

    Tipp

    Im folgenden Codebeispiel wird davon ausgegangen, dass sich ein NamedRange-Steuerelement mit dem Namen NamedRange1 auf dem Arbeitsblatt befindet.

    Dim formula As String = CType( _
        GetPropertyInternational(NamedRange1.InnerObject, "Formula"), String)
    
    MessageBox.Show(formula)
    
    string formula = (string)
        GetPropertyInternational(NamedRange1.InnerObject, "Formula");
    
    MessageBox.Show(formula);
    

Siehe auch

Aufgaben

Gewusst wie: Anpassen an die mehrsprachige Benutzeroberfläche von Office

Konzepte

Dynamisches Laden und Verwenden von Typen

Formatieren von Daten in Excel mit verschiedenen regionalen Einstellungen

Globalisierung und Lokalisierung von Office-Projektmappen

Weitere Ressourcen

Deploying Office Solutions

Entwerfen und Erstellen von Office-Lösungen