Compartilhar via


Como: Verifique literais de Cadeia de Caracteres seguro de região no Excel usando Reflexo

Se aplica a

As informações contidas neste tópico se aplicam apenas às especificado Ferramentas do Visual Studio para o Office projetos e as versões do Microsoft Office.

Tipo de Projeto

  • Projetos de nível de documento

Versão do Microsoft Office

  • O Excel 2003

  • O Excel 2007

For more information, see Recursos disponíveis pelo aplicativo e o tipo de projeto.

Quando você usa as configurações de Ferramentas do Visual Studio para o Office padrão, sempre Formatar seqüências de dados de localidade confidenciais como inglês (Estados Unidos) e o Excel irão exibir os dados corretamente formatados automaticamente.Se você alterar o padrão por Configuração ExcelLocale1033Attribute a false e passar literais da cadeia de caracteres para o Excel, o thread atual LCID é usado automaticamente e dados podem ser formatados incorretamente.For more information, see Formatação de dados no Excel com várias configurações regionais.

Se você definir ExcelLocale1033Attribute a false, você pode usar Reflexo para definir ou obter uma propriedade ou chamar um méTudo no intervalo de destino, passando um CultureInfo de inglês (Estados Unidos) para que você pode usar o nome de qualquer cadeia de caracteres em inglês e funcionará corretamente em Tudo as localidades.

Para definir uma propriedade em um intervalo do Excel usando Reflexo

  1. Criar uma função auxiliar chamada SetPropertyInternational para passar o LCID para inglês (Estados Unidos) sempre que você definir valores de propriedade em intervalos de Excel, passando uma Cadeia de Caracteres literal.

    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 Controlarar de NamedRange na célula A5 e Nome ele 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. Em vez de Configuração a propriedade de Formula de NamedRange1 diretamente, chamar a função SetPropertyInternational e passar a NamedRange, o nome da propriedade e o valor.

    Observação:

    Você não pode passar na Controlarar NamedRange diretamente, você deve passar o objeto Range subjacente, chamando o método InnerObject.For more information, see Limitações através 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 Reflexo

  1. Criar uma função chamada GetPropertyInternational para definir o LCID sempre que você recuperar valores de propriedade de intervalos do 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. Chame a função GetPropertyInternational e passe a NamedRange e o nome de propriedade.

    Observação:

    O seguinte exemplo de código assume que um Controlarar de NamedRange 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: Destino a interface do usuário multilíngüe do Office

Conceitos

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

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

Criar soluções do Office no Visual Studio

Outros recursos

Implantar soluções do Office