Compartilhar via


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

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.

Você deve formatar Tudo dados que possui formatação de detecção de localidade, como datas e Unidade Monetária, usando o formato de dados (localidade identificação 1033) Português (Brasil) antes de passá-lo para o Microsoft Office Excel ou ler os dados do código em seu projeto Ferramentas do Visual Studio para o Office.

Por padrão, o Tempo de execução Ferramentas do Visual Studio para o Office faz com que o modelo de objeto do Excel para esperar Identificação da Localidade 1033 formatação de dados (isso também é chamado bloqueio o modelo de objeto para Identificação da Localidade 1033).Esse comportamento corresponde da maneira que o Visual Basic for Applications funciona.No entanto, você pode modificar esse comportamento em suas soluções Ferramentas do Visual Studio para o Office.

Programar o modelo de objeto de Excel Locked

Por padrão, personalizações em nível de documento e nível de aplicativo Adicionar-ins que você cria usando Ferramentas do Visual Studio para o Office não são afetadas pelas configurações de localidade do usuário final e sempre se comportam como se o idioma for inglês (Estados Unidos).Por exemplo, se você obter ou definir a propriedade Value2 no Excel, os dados devem ser formatados da maneira que Identificação da Localidade 1033 espera.Se você usar um Formatarar de dados diferentes, você poderá obter resultados inesperados.

Mesmo que você usar o Inglês Formatarar (Estados Unidos) para dados que são passados ou manipulado por código gerenciado, o Excel interpreta e exibe os dados corretamente de acordo com a configuração de localidade do usuário final.O Excel pode formatar os dados corretamente porque o código gerenciado passa Identificação da Localidade 1033 juntamente com os dados, que indica que os dados estão no formato de inglês (Estados Unidos) e, portanto, devem ser reformatados para coincidir com a configuração do usuário local.

Por exemplo, se os usuários finais tiver suas opções regionais definido para a localidade Alemão (Alemanha), esperar a data 29 de junho de 2005, para ser formatada assim: 29.06.2005.No entanto, se sua solução passa a data para o Excel como uma Cadeia de Caracteres, você deve formatar a data de acordo com formato inglês (Estados Unidos): 6/29/2005.Se a célula for formatada como uma célula de data, o Excel exibirá a data no formato de Alemão (Alemanha).

Desbloquear o modelo de objeto do Excel

Ferramentas do Visual Studio para o Office permite que você desbloqueie o comportamento de Identificação da Localidade para todo o modelo de objeto do Excel.O ExcelLocale1033Attribute controla o comportamento de modelo de objeto de Excel em sua solução Ferramentas do Visual Studio para o Office.Por padrão o atributo é definido como true, que bloqueia o modelo de objeto do Excel para esperar Identificação da Localidade 1033 formatação.Quando esse atributo estiver true, Ferramentas do Visual Studio para o Office envolve cada objeto de Excel que é instanciado pela solução em um objeto de proxy que sempre passa a Identificação da Localidade 1033 para o Excel.Quando você define o atributo a false, esses objetos de proxy não são usados, e o modelo de objeto do Excel usa configurações de localidade do usuário final.

Observação:

Se você definir o atributo para false e os usuários de end têm uma configuração de localidade Outro do inglês (Estados Unidos), eles podem ver um comportamento inesperado em sua solução.Você pode Gravar seu código para que ele funcione em qualquer configuração de localidade.For more information, see Como: Verifique literais de Cadeia de Caracteres seguro de região no Excel usando Reflexo.

Para desbloquear o modelo de objeto, defina o ExcelLocale1033Attribute no arquivo AssemblyInfo.vb ou AssemblyInfo.cs no seu projeto com false.

<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]
Observação:

B ecause o Tempo de execução de Ferramentas do Visual Studio para o Office quebra Tudo objetos nativos do Excel em um objeto de proxy quando ExcelLocale1033Attribute a true, você poderá notar uma diminuição em algumas operações que envolvem nativos objetos do Excel.Nesses casos, você pode melhorar o desempenho usando o método Unwrap para obter o objeto de Excel sem o proxy e, em seguida, executar a operação usando esse objeto.Se você fizer isso, esteja ciente de que o objeto retornado por Unwrap usa a Identificação da Localidade do thread atual, não local identificação 1033.

Desbloqueando objetos Excel específicos no Excel 2003 projetos

Se você estiver desenvolvendo soluções para o Excel 2003, existem alguns casos em que você precise modificar um objeto de Excel nativo (isto é, uma instância de uma classe que é definida no namespace de Microsoft.Office.Interop.Excel) para que ele use a Identificação da Localidade do thread atual em vez de localidade identificação 1033.Por exemplo, você deve fazer isso se você quer passar null como um parâmetro out de um método que pertence a um objeto do Excel.

Para alterar o comportamento de Identificação da Localidade para objetos individuais do Excel em projetos do Excel 2003, use métodos da classe ExcelLocale1033Proxy.Chame o método Unwrap para modificar um objeto do Excel de modo que ele usa a Identificação da Localidade do thread atual em vez de localidade identificação 1033.

Depois que você chamar Unwrap para modificar um objeto do Excel, talvez queira usar o objeto novamente, mas em uma situação onde você deseja usar 1033 de Identificação da Localidade em vez da identificação de local do thread atual.Chame o método Wrap para encapsular o objeto de Excel em um objeto de proxy que ele usa a localidade identificação 1033 em vez da Identificação da Localidade do thread atual.

Observação:

O Unwrap e Wrap métodos são obsoletos em projetos de Ferramentas do Visual Studio para o Office para o Excel 2007.O Tempo de execução Ferramentas do Visual Studio para o Office que é usado com projetos do Excel 2007 contém aperfeiçoamentos que tornar o Excel nativo objetos funcionam como esperado quando o ExcelLocale1033Attributetrue.Para obter mais informações sobre o tempo de execução de Ferramentas do Visual Studio para o Office , consulte O Visual Studio Tools for Visão geral de tempo de execução do Office.

Chamar métodos que possui check-out parâmetros enquanto o Excel objeto modelo está bloqueado

Se o ExcelLocale1033Attributetrue em uma solução de Excel 2003, você receberá uma exceção se você passar null como um parâmetro out de um método no modelo de objeto do Excel.Para passar null como um parâmetro de out , você deve chamar Unwrap e passar no objeto que contém o método antes de chamar o método.

Como alternativa, você pode atribuir o parâmetro para um valor antes de chamar o método.Para obter mais informações sobre parâmetros de out , consulte check-out (Referência C#).

Por exemplo, o código a seguir lança uma exceção se o ExcelLocale1033Attributetrue.O método ExportXml tem um parâmetro out.

Dim outString As String = Nothing
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = null;
Excel.XlXmlExportResult expResult =
Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

Para resolver esse problema, você pode passar a XmlMap para o método Unwrap antes de chamar ExportXml.

Dim outString As String = Nothing
Dim map As Excel.XmlMap = TryCast( _
    Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap( _
    Globals.ThisWorkbook.XmlMaps(1)), Excel.XmlMap)
Dim result As Excel.XlXmlExportResult = map.ExportXml(outString)
string outString = null;
Excel.XmlMap map = Microsoft.Office.Tools.Excel.
    ExcelLocale1033Proxy.Unwrap(
    Globals.ThisWorkbook.XmlMaps[1]) as Excel.XmlMap;
Excel.XlXmlExportResult expResult = map.ExportXml(out outString);

Como alternativa, você pode atribuir a variável outString para um valor antes de passá-la para ExportXml.

Dim outString As String = String.Empty
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = String.Empty;
Excel.XlXmlExportResult expResult =
    Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

Consulte também

Tarefas

Como: Localize soluções do Excel

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

Conceitos

Criar soluções do Office no Visual Studio

O Visual Studio Tools for Visão geral de tempo de execução do Office

Referência

ExcelLocale1033Attribute

ExcelLocale1033Proxy

Outros recursos

Estendendo metadados usando atributos