【发布时间】:2014-09-18 13:25:09
【问题描述】:
我使用 apache poi 3.7 和 java 7。
我在 .xls 格式的 excel 中输出时间单元格时遇到问题。小时和分钟在数据库中作为一个值存储为双精度值。 如果我在生成的 xls 文件中传递值 1.0 将显示为 1h 24 min。不幸的是,这个问题不会在本地发生。我无权访问数据,也无法在本地环境中重复此问题。
下面是我初始化工作簿和问题单元格格式的代码:
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);
}
【问题讨论】:
-
对我来说看起来不错。你确定
value包含1.0吗? -
为避免 java.util.Date 和 Excel 之间发生一些转换,您可以使用
c.setCellFormula("TIME("+hours+","+minutes+",00)");而不是c.setCellValue(...)看看是否更好。
标签: java excel apache-poi xls