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

Aktualisiert: November 2007

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Projekte und Versionen von Visual Studio Tools for Office von Microsoft Office.

Projekttyp

  • Projekte auf Dokumentebene

Microsoft Office-Version

  • Excel 2003

  • Excel 2007

Weitere Informationen finden Sie unter Verfügbare Features nach Anwendung und Projekttyp.

Formatieren Sie, wenn Sie Visual Studio Tools for Office-Standardeinstellungen verwenden, gebietsschemaabhängige Datenzeichenfolgen stets als Englisch (USA). Excel zeigt die Daten dann automatisch im richtigen Format an. Wenn Sie die Standardeinstellungen ändern, indem Sie ExcelLocale1033Attribute auf false festlegen, und anschließend Zeichenfolgenliterale 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.

Wenn Sie ExcelLocale1033Attribute auf false festlegen, können Sie Reflektion verwenden, um eine Eigenschaft festzulegen oder abzurufen oder eine Methode im Zielbereich aufzurufen. Übergeben Sie die CultureInfo für Englisch (USA), sodass Sie die englische Bezeichnung von Zeichenfolgen verwenden können. Damit wird die korrekte Funktion in allen Gebietsschemas erreicht.

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

  1. Erstellen Sie eine als SetPropertyInternational bezeichnete Hilfsfunktion, um die LCID für Englisch (USA) zu übergeben, wenn Sie die Eigenschaftenwerte in Excel durch Übergeben eines Zeichenfolgenliterals übergeben.

    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. Statt die Formula-Eigenschaft von NamedRange1 direkt festzulegen, rufen Sie die SetPropertyInternational-Funktion auf, und übergeben Sie ihr den NamedRange, den Eigenschaftennamen und den Wert.

    Hinweis:

    Sie können das NamedRange-Steuerelement nicht direkt übergeben, sondern Sie müssen das zugrunde liegende Range-Objekt durch Aufrufen der InnerObject-Methode übergeben. 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 Eigenschaftenwert aus einem Excel-Bereich ab

  1. Erstellen Sie eine als GetPropertyInternational bezeichnete Funktion, um die LCID festzulegen, wenn Sie Eigenschaftenwerte aus Excel-Bereichen abrufen.

    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.

    Hinweis:

    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

Formatieren von Daten in Excel mit verschiedenen regionalen Einstellungen

Globalisierung und Lokalisierung von Office-Projektmappen

Erstellen von Office-Projektmappen in Visual Studio

Weitere Ressourcen

Bereitstellen von Office-Projektmappen