2012-06-29 18 views
8

Estoy usando apache poi 3.8 para crear un archivo de Excel. Este archivo de Excel debe contener algunas fechas.Cómo configurar la fecha como tipo de fecha en excel con apache poi?

Estoy tratando de escribir una fecha en el archivo de Excel con el formato excel type "date". Pero siempre obtengo un tipo "personalizado". Necesito usar el tipo "fecha", por lo que se localizará en función de la configuración de los usuarios.

He intentado lo siguiente:

Apache poi date format

Apache POI localized Date into Excel cell

Pero doens't trabajo.

Este es el código que tengo:

XSSFWorkbook wb = new XSSFWorkbook(); 
XSSFSheet sheet = wb.createSheet("new sheet"); 

XSSFDataFormat df = wb.createDataFormat(); 
CellStyle cs = wb.createCellStyle(); 
cs.setDataFormat(df.getFormat("d-mmm-yy")); 

XSSFCell cell = sheet.createRow(0).createCell(0); 

Calendar c = Calendar.getInstance(); 
c.set(2012,3-1,18); 
cell.setCellValue(c.getTime()); 

cell.setCellStyle(cs); 

// Write the output to a file 
FileOutputStream fileOut = new FileOutputStream("c:\\temp\\dates-sworkbook.xlsx"); 
wb.write(fileOut); 
fileOut.close(); 

¿Qué formato debo usar?

Gracias

Respuesta

9

Fecha es uno de los especiales, construida en los formatos. Si desea usar ese de manera explícita, debe elegirlo explícitamente. (Casi todos los formatos utilizados en Excel son personalizados, que representan cómo se especifica, pero hay algunos especiales)

POI tiene la lista completa de formatos especiales incorporados (que es mucho más pequeña que la lista de formatos) en las listas desplegables de copias recientes de Excel!) en BuiltinFormats. Si se asegura de configurar uno, y no su propia cadena de formato personalizado, debería comportarse exactamente como espera

+3

pensé "d-mmm-aa" fue construido en un formato. Pero por alguna razón, este formato no funciona. Cuando uso "m/d/aa" funciona como se esperaba. – cremersstijn

+1

No, d-mmm-yy es un formato de estilo europeo. ¡Eso es lo que parecen las cosas integradas (estilo americano) cuando lo muestra en Europa! – Gagravarr

+0

En realidad, no es verdad. Especifiqué el formato 22 (0x16, "m/d/aa h: mm"). Pero se muestra como "Personalizado". – Alexey

0

entiendo su problema. Resolví usar DateUtil de Apache Poi.

Cell cell = yourRow.createCell(yourIndex); 
cell.setCellValue(DateUtil.getExcelDate(yourDate); 

Enjoy !!

0

Se resuelve mediante el siguiente:

DataFormatter fmt = new DataFormatter(); 
Object Excel1data=Excel.readExcel(Excel1, "Sheet3", rownumber, columnnumber1); 
      String valueAsInExcel1 = fmt.formatCellValue((Cell) Excel1data); 

      Object Excel2Data=Excel.readExcel(Excel2, "Sheet2", getrownumber, columnnmumber2); 
      String valueAsInExcel2 = fmt.formatCellValue((Cell) Excel2Data); 

      org.testng.Assert.assertEquals(valueAsInExcel1, valueAsInExcel2,"Incorrect data in RowNumber:"+getrownumber+" ColumnNumber:"+columnnmumber2); 
      columnnumber1++; 
Cuestiones relacionadas