我使用apache poi 3.7和java 7。
我在.xls格式的excel中输出时间单元格有问题。小时和分钟作为一个值存储在数据库中,为double。 如果我在生成的xls文件中传递值1.0将显示为1小时24分钟。不幸的是,这个问题不会在本地我无法访问数据,我无法在本地环境中重复此问题。
下面是我初始化工作簿和有问题单元格格式的代码:
Workbook workbook = WorkbookFactory.create(template);
DateFormat df = workbook.createDataFormat();
CellStyle style = workbook.createCellStyle();
style.setDataFormat(df.getFormat("h:mm"));
下面是用于创建单元格的函数。函数从数据库获取参数值:
private void createTimeCell(Row r, int pos, double value) {
int hours = (int) value;
int minutes = (int) Math.round((value - hours) * 60);
Date date = new Date(0, 0, 1);
date.setHours(hours);
date.setMinutes(minutes);
Cell c = r.createCell(pos);
c.setCellValue(date);
c.setCellStyle(style);
}
答案 0 :(得分:0)
Excel中的日期和时间存储为浮点数,整数部分是自1900/1904以来的天数,余数作为一天的一小部分时间。
因此,您可以通过以下方式使代码更简单:
Workbook workbook = WorkbookFactory.create(template);
DateFormat df = workbook.createDataFormat();
CellStyle timeStyle = workbook.createCellStyle();
timeStyle.setDataFormat(df.getFormat("h:mm"));
private void createTimeCell(Row r, int pos, double hoursAndMinutes) {
Cell c = r.getCell(pos, Row.CREATE_NUL_AS_BLANK);
c.setCellValue(hoursAndMinutes / 24);
c.setCellStyle(timeStyle);
}