Sto cercando di creare un foglio di lavoro Excel utilizzando l'API POI in Java. In quel foglio di lavoro Excel voglio avere una cella con TIME da solo. Impostando questo possiamo includere la cella nella sommatoria di quella colonna particularia come facciamo nelle colonne numeriche. Per questo abbiamo bisogno di formattare la cella come Tempo >> 13:30:55. (Il formato interno è 'h: mm: ss; @'). E dobbiamo rimuovere la parte della data dalla cella.Impostazione dell'ora in Excel utilizzando il POI
Quando leggo la cella il valore della cella utilizzando il POI, viene restituito come 'Dom Dec 31 01:00:00 IST 1899' (Quando imposto il valore come 1:00), l'indice di formato cella è 166 e la stringa di formato della cella è 'h: mm: ss; @'.
Dopo aver impostato i formati e lo stile letti dall'eccel e dal valore di cella come 1800-December-31 e con il valore di ora, il nuovo excel mostra cella come '######' (errore) e il valore della cella è impostato come '-1'. Di seguito è riportato il codice che ho usato. Mi sono perso qualcosa? È possibile impostare il valore come richiesto.
InputStream is = new BufferedInputStream(new FileInputStream("<FileName>"));
XSSFWorkbook wb = new XSSFWorkbook(is);
is.close();
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row = sheet.getRow(2);
XSSFCell cell = row.getCell(18);
System.out.println("ExcelFileReader main cell.getDateCellValue() : '" + cell.getDateCellValue() + "'");
System.out.println("ExcelFileReader main cell.getCellStyle().getDataFormat() : '" + cell.getCellStyle().getDataFormat() + "'");
System.out.println("ExcelFileReader main cell.getCellStyle().getDataFormat() : '" + cell.getCellStyle().getDataFormatString() + "'");
XSSFRow row1 = sheet.createRow(21);
XSSFCell cell1 = row1.createCell(2);
cell1.setCellStyle(cell.getCellStyle());
cell1.setCellValue(cell.getDateCellValue());
Calendar dummy = Calendar.getInstance();
dummy.setLenient(false);
dummy.set(Calendar.YEAR, 1899);
dummy.set(Calendar.MONTH, Calendar.DECEMBER);
dummy.set(Calendar.DATE, 31);
dummy.set(Calendar.HOUR, 00);
dummy.set(Calendar.MINUTE, 00);
dummy.set(Calendar.SECOND, 00);
dummy.set(Calendar.MILLISECOND, 00);
Calendar cc = Calendar.getInstance();
XSSFRow row2 = sheet.createRow(25);
XSSFCell cell2 = row2.createCell(2);
dummy.set(Calendar.HOUR, cc.get(Calendar.HOUR));
dummy.set(Calendar.MINUTE, cc.get(Calendar.MINUTE));
dummy.set(Calendar.SECOND, cc.get(Calendar.SECOND));
dummy.set(Calendar.MILLISECOND, cc.get(Calendar.MILLISECOND));
System.out.println("ExcelFileReader main dummy : '" + dummy.getTime() + "'");
cell2.setCellValue(dummy.getTime());
CellStyle style = wb.createCellStyle();
DataFormat df = wb.createDataFormat();
style.setDataFormat(df.getFormat("[h]:mm:ss;@"));
cell2.setCellStyle(style);
FileOutputStream fos = new FileOutputStream(new File("<New Excel file>"));
wb.write(fos);
fos.close();
System.out.println("ExcelFileReader DONE");
Quanto segue è l'output del programma.
ExcelFileReader main cell.getDateCellValue() : 'Sun Dec 31 00:15:00 IST 1899'
ExcelFileReader main cell.getCellStyle().getDataFormat() : '166'
ExcelFileReader main cell.getCellStyle().getDataFormat() : 'h:mm:ss;@'
ExcelFileReader main dummy : 'Sun Dec 31 11:32:24 IST 1899'
ExcelFileReader DONE
###### possono essere visualizzati se la colonna tempo non è abbastanza ampia –