我必须读取 Excel 文件并使用 Java 的 POI API 填充一些单元格。我将整个工作簿写到另一个工作簿中。这确实有效。
问题是(一旦填充了单元格)我必须打开文件并单击并输入我修改过的单元格,以便刷新其他公式单元格的值。
代码是这样的:
cellHorasPrevistas.setCellValue("01:00:00")
当我输入 xls 文件时,它似乎是一个原始字符串,而不是格式化为“[h]:mm:ss”(这是单元格的初始格式)。
我尝试过手动重写格式,但没有成功:
HSSFCellStyle cs = wb.createCellStyle();
HSSFDataFormat df = wb.createDataFormat();
cs.setDataFormat(df.getFormat("[h]:mm:ss"));
cellHorasPrevistas.setCellStyle(cs);
cellHorasPrevistas.setCellValue("01:00:00")
我也尝试过,但没有运气
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
fe.clearAllCachedResultValues()
fe.notifyUpdateCell(cellHorasPrevistas)
fe.evaluate(cellHorasPrevistas)
我一定很简单,只需更改单元格值即可使该单元格与我在 xls 中手动更改的值相同。
提前致谢, 劳尔
找到了部分解释......问题是 de CellType 正在从数字更改为字符串,因此 excel 无法在公式中使用它。我想保留数字格式,将值设置为“12:00:00”而不是 0.5。可能吗?
最佳答案
您可以尝试使用Date
或Calendar
对象来设置值而不是字符串。您可能必须创建一个虚拟对象,它仅设置了适当的时间。
我必须将年份设置为 1970,月份设置为一月,日期设置为 1,才能使其像这样工作:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFRow row = wb.createSheet().createRow(0);
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("HH:mm:ss"));
HSSFCell cell = row.createCell(1);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 1970);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DATE, 1);
//you can set the time you need here ...
cell.setCellValue(cal);
cell.setCellStyle(cellStyle);
结果:
如果我将 YEAR
/MONTH
/DATE
部分保留为正常,则时间将是自 1970 年 1 月 1 日以来的所有时间。
关于java - Excel POI API 更改单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717009/