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
Versão do Microsoft Office
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
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)); }
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");
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
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)); }
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