Condividi tramite


Procedura: specificare stringhe letterali indipendenti dalle impostazioni internazionali in Excel mediante la reflection

Aggiornamento: novembre 2007

Si applica a

Le informazioni contenute in questo argomento riguardano solo i progetti Visual Studio Tools per Office e le versioni di Microsoft Office specificati.

Tipo di progetto

  • Progetti a livello di documento

Versione Microsoft Office

  • Excel 2003

  • Excel 2007

Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazione.

Quando si utilizzano le impostazioni predefinite di Visual Studio Tools per Office, formattare sempre le stringhe sensibili alle impostazioni locali per la lingua inglese (Stati Uniti): in questo modo, Excel visualizzarà automaticamente i dati formattati correttamente. Se l'impostazione predefinita viene modificata impostando l'oggetto ExcelLocale1033Attribute su false e le stringhe letterali vengono passate a Excel, viene utilizzato automaticamente l'LCID corrente del thread ed è possibile che i dati vengano formattati in modo errato. Per ulteriori informazioni, vedere Formattazione di dati in Excel con varie impostazioni internazionali.

Se si imposta l'oggetto ExcelLocale1033Attribute su false, è possibile utilizzare la reflection per impostare o ottenere una proprietà oppure richiamare un metodo nell'intervallo di destinazione, passando un oggetto CultureInfo per la lingua inglese (Stati Uniti) in modo che il nome inglese di ciascuna stringa possa essere utilizzato correttamente con tutte le impostazioni locali.

Per impostare una proprietà in un intervallo di Excel mediante reflection

  1. Creare una funzione di supporto denominata SetPropertyInternational per passare l'LCID per la lingua inglese (Stati Uniti) ogni volta che si impostano valori di proprietà negli intervalli di Excel passando una stringa letterale.

    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. Creare un controllo NamedRange nella cella A5 denominato 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. Invece di impostare direttamente la proprietà Formula di NamedRange1, chiamare la funzione SetPropertyInternational e passare il controllo NamedRange, il nome della proprietà e il valore.

    Nota:

    Non è possibile passare direttamente il controllo NamedRange. È necessario passare l'oggetto Range sottostante chiamando il metodo InnerObject. Per ulteriori informazioni, vedere Limitazioni a livello di codice degli elementi e dei controlli host.

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

Per recuperare un valore di proprietà da un intervallo di Excel mediante reflection

  1. Creare una funzione denominata GetPropertyInternational per impostare l'LCID ogni volta che si richiamano valori di proprietà dagli intervalli di Excel.

    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. Chiamare la funzione GetPropertyInternational e passare il controllo NamedRange e il nome della proprietà.

    Nota:

    Nell'esempio di codice riportato di seguito si presume che nel foglio di lavoro sia disponibile un controllo NamedRange denominato NamedRange1.

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

Vedere anche

Attività

Procedura: utilizzare l'interfaccia utente multilingue (MUI) di Office

Concetti

Formattazione di dati in Excel con varie impostazioni internazionali

Globalizzazione e localizzazione di soluzioni Office

Creazione di soluzioni Office in Visual Studio

Altre risorse

Distribuzione di soluzioni Office