Como: Tornar seguras para a região de literais de seqüência de caracteres no Excel usando a reflexão

Em projetos do Office, o Excel exibe seqüências de dados sensíveis à localidade corretamente se você formatar as seqüências de caracteres em seu projeto como o inglês (Estados Unidos). Você pode alterar esse comportamento em um projeto do Office que se destina a.NET Framework 3.5, definindo Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute para false. Entretanto, quando você passar literais de seqüência de caracteres para o Excel depois de alterar este atributo, a LCID atual do segmento é usado automaticamente e dados podem ser formatados incorretamente. For more information, see Formatação de dados no Excel com várias configurações regionais.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de nível de aplicativo para Excel 2007 e Excel 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Se você definir Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute para false em um projeto do Office que se destina a.NET Framework 3.5, você pode usar a reflexão para forçar as chamadas específicas às propriedades e métodos dos objetos do Excel para usar o formato de dados de inglês (Estados Unidos) (1033 de identificação de localidade). Quando você fizer isso, você pode usar a formatação de seqüências de caracteres são passadas para o método ou propriedade em inglês (Estados Unidos) e o código funcionará corretamente em todas as localidades.

Os exemplos a seguir demonstram como definir ou obter uma propriedade de um NamedRange de controle em um projeto de nível de documento para o Excel, mas os mesmos conceitos também se aplicam a objetos do Excel em projetos de nível de aplicativo.

Para definir uma propriedade em um intervalo do Excel usando a reflexão

  1. Criar um método auxiliar que usa o InvokeMember método para definir um valor de propriedade de um objeto Excel. Inclua parâmetros para o objeto do Excel, o nome da propriedade e os parâmetros da propriedade. No método auxiliar, use um InvokeMember sobrecarga que tem um CultureInfo parâmetro e passar a identificação de localidade para inglês (Estados Unidos) para este parâmetro.

    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. Criar um NamedRange controlar a célula A5 e nomeie- 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. Ao invés de definir o Formula propriedade de NamedRange1 , ligue para o SetPropertyInternational método auxiliar e passar a base Range objeto para o NamedRange controle, o nome de propriedade e valor.

    ObservaçãoObservação

    Você não pode passar o NamedRange de controle diretamente. Em vez disso, você deve obter a base do Excel Range o objeto usando o InnerObject propriedade e em seguida, passar este objeto para o método. For more information, see Limitações de programação de itens de Host e controles de Host.

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

Para recuperar um valor de propriedade de um intervalo do Excel usando a reflexão

  1. Criar uma função auxiliar que usa o InvokeMember método para obter um valor de propriedade de um objeto Excel. O objeto, o nome da propriedade e os parâmetros da propriedade são passados para o método auxiliar.

    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. Chamar o GetPropertyInternational de função e passar a NamedRange e o nome da propriedade.

    ObservaçãoObservação

    O exemplo de código a seguir pressupõe que você tenha um NamedRange controle chamado NamedRange1 na planilha.

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

Consulte também

Tarefas

Como: O Interface do usuário multilíngüe do Office de destino.

Conceitos

Carregar dinamicamente e usando tipos

Formatação de dados no Excel com várias configurações regionais

Globalização e localização de soluções do Office

Outros recursos

Deploying Office Solutions

Projetando e criando soluções do Office