Eu uso o Apache POI há algum tempo para ler arquivos existentes do Excel 2003 de forma programática. Agora eu tenho um novo requisito para criar arquivos .xls inteiros na memória (ainda usando Apache POI) e, em seguida, gravá-los em um arquivo no final. O único problema no meu caminho é o manuseio de células com datas.
Considere o seguinte código:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
Quando escrevo a pasta de trabalho que contém essa célula em um arquivo e o abro com o Excel, a célula é exibida como um número. Sim, eu sei que o Excel armazena suas 'datas' como o número de dias desde 1º de janeiro de 1900 e é isso que o número na célula representa.
PERGUNTA: Quais chamadas de API posso usar no POI para informar que desejo um formato de data padrão aplicado à minha célula de data?
O ideal é que a célula da planilha seja exibida com o mesmo formato de data padrão que o Excel teria atribuído se um usuário tivesse aberto manualmente a planilha no Excel e digitado um valor de célula que o Excel reconheceu como uma data.
fonte
BuiltinFormats
que lista todos os formatos padrão (não apenas formatos de data) que o Excel conhece. Estou usando um desses para usar como meu parâmetro para ogetFormat()
método mostrado no trecho acima.getCreationHelper()
é necessário? Estou trabalhando com o Mule agora para gerar um arquivo de saída do Excel e, na verdade, consegui usar ocreateDataFormat()
sem o auxiliar de criação e gerei um arquivo do Excel no meu teste. Existe uma desvantagem em não usá-lo? Obrigado!mm/dd/yyyy
. Quando eu uso qualquer outro formato, o excel exibe um erroFile error, some number formats may have been lost
, ele exibe oDate
tipo no excel. Não tenho ideia de como isso pode ser consertado.Para definir o tipo de data do Excel padrão (padronizado para o local do nível do sistema operacional / -> ou seja, xlsx parecerá diferente quando aberto por um alemão ou britânico / e marcado com um asterisco se você escolher no seletor de formato de célula do Excel), você deve:
Eu fiz isso com xlsx e funcionou bem.
fonte
Este exemplo é para trabalhar com tipos de arquivo .xlsx. Este exemplo vem de uma página .jsp usada para criar uma planilha .xslx.
fonte
Estou escrevendo minha resposta aqui porque pode ser útil para outros leitores, que podem ter um requisito ligeiramente diferente do que o questionador aqui.
Eu preparo um modelo .xlsx; todas as células que serão preenchidas com datas, já estão formatadas como células de data (usando o Excel).
Abro o modelo .xlsx usando o Apache POI e, em seguida, apenas escrevo a data na célula e funciona.
No exemplo a seguir, a célula A1 já está formatada no Excel com o formato
[$-409]mmm yyyy
e o código Java é usado apenas para preencher a célula.Quando o Excel é aberto, a data é formatada corretamente.
fonte
Este exemplo de código pode ser usado para alterar o formato da data. Aqui eu quero mudar de aaaa-MM-dd para dd-MM-aaaa. Aqui
pos
está a posição da coluna.fonte
Para saber a string de formato usada pelo Excel sem precisar adivinhá-la: crie um arquivo excel, escreva uma data na célula A1 e formate-a como desejar. Em seguida, execute as seguintes linhas:
Em seguida, copie e cole a string resultante, remova as barras invertidas (por exemplo,
d/m/yy\ h\.mm;@
se tornad/m/yy h.mm;@
) e use-a no código http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells :fonte