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