java - Excel POI API 更改单元格值

标签 java apache excel apache-poi xls

我必须读取 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。可能吗?

最佳答案

您可以尝试使用DateCalendar对象来设置值而不是字符串。您可能必须创建一个虚拟对象,它仅设置了适当的时间。

我必须将年份设置为 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);

结果:

enter image description here

如果我将 YEAR/MONTH/DATE 部分保留为正常,则时间将是自 1970 年 1 月 1 日以来的所有时间。

关于java - Excel POI API 更改单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717009/

相关文章:

java - 任何用于 Java 的 RFC 2397 数据 URI 解析器?

image - 从 Excel 文档中提取图像

php - 如何预测系统资源需求?

apache - 使用 .htaccess 将子目录重定向到根 URL

excel - 为空则不工作

function - 是否有excel vb的功能可以连续检查工作表?

java - Jersey web.xml 到基于注释的配置以及 HK2 绑定(bind)

java - 为什么我不能有两个带有 ArrayList 参数的方法?

java - 如何以编程方式搜索 Google Java API

apache - 通过 htaccess 禁用 Apache http2 公告