poi3.8 单元格显示时间hh:mm,怎么样才能在不改变单元格的情况下,选中单元格,单元格的值在公式栏显示不包含日期的时间hh:mm:ss,setcellstyle 设置之后需要双击才有效,怎么解决这个问题
如果设置了样式后需要双击才能生效,可能是因为该单元格的值是以日期格式存储的,而日期格式的值在Excel中默认会显示为包含日期和时间的格式。
为了解决这个问题,可以在设置样式之前将单元格的值转换为只包含时间部分的格式,然后再将样式应用到单元格中。可以使用 HSSFDateUtil
类的 isCellDateFormatted
方法来判断单元格是否为日期格式,如果是,则使用 DateUtil.getJavaDate
方法将日期格式转换为日期对象,再使用 DateUtils.truncate
方法将日期对象的日期部分截取掉,只保留时间部分,最后将时间部分的值设置回单元格中,再应用样式。
以下是示例代码:
Cell cell = row.createCell(cellIndex);
cell.setCellValue(date);
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date cellValue = DateUtil.getJavaDate(cell.getNumericCellValue());
Date truncatedValue = DateUtils.truncate(cellValue, Calendar.DAY_OF_MONTH);
cell.setCellValue(truncatedValue);
}
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("hh:mm"));
DataFormat format = workbook.createDataFormat();
cell.setCellType(CellType.FORMULA);
cell.setCellStyle(cellStyle);
cell.setCellFormula("TEXT(" + CellReference.convertNumToColString(cell.getColumnIndex()) + (cell.getRowIndex() + 1) + ",\"" + "hh:mm" + "\")");
cell.getCellStyle().setDataFormat(format.getFormat("hh:mm"));
其中,workbook
表示当前工作簿对象,row
表示当前行对象,cellIndex
表示当前单元格列索引,date
表示单元格的时间值。
这段代码首先创建了一个单元格对象 cell
,并将其值设置为时间值。然后使用 HSSFDateUtil.isCellDateFormatted
方法判断单元格是否为日期格式,如果是,则使用 DateUtil.getJavaDate
方法将日期格式转换为日期对象,再使用 DateUtils.truncate
方法将日期对象的日期部分截取掉,只保留时间部分,最后将时间部分的值设置回单元格中。接下来创建一个样式对象 cellStyle
,并将其设置为 hh:mm
格式。然后将该样式应用到单元格中,再将单元格的类型设置为公式类型,将公式设置为 TEXT()
函数,将单元格的值作为参数传入,同时指定输出格式为 hh:mm
。最后将单元格的样式设置为该格式,这样在选中单元格时,在公式栏中将只显示时间部分,不包含日期部分。
相关推荐
















