当前位置: 首页 > 知识库问答 >
问题:

Apache POI-允许使用时间字符串进行计算

蔚俊人
2023-03-14

我有一张excel表格,里面有一些时间值。这些值是格式化为字符串的持续时间。当我尝试对这些值求和时,结果是0,因为Excel不能对字符串求和。当我点击公式栏上的回车键时,它确实变成了一个时间,所以我计算出的总和是有效的。如何将单元格的值从字符串更改为时间值?我已经将日期格式设置为[hh:mm]日期格式

我从转换成秒的时间量开始,我将其转换成持续时间

Duration clockedDuration = Duration.ofSeconds(clockedSeconds)

然后我使用DurationFormatUtils

DurationFormatUtils.formatDuration(duration.toMillis(), "HH:mm", true)

然后我将单元格值设置为刚刚生成的字符串

c.setCellValue(clockedDuration)

然后我将CellStyle设置为一个DataFormat,设置为[hh]:mm

最后,我对该列中的所有值求和(在本例中为B)

c = r.createCell(i++)
c.setCellFormula("SUM(B2:B" + lastRow +")")
c.setCellType(Cell.CELL_TYPE_FORMULA)

这是在我点击行中第一个值上的回车键之前的工作表(09:52)

这是我点击公式栏中的回车键后的工作表

共有2个答案

夏季萌
2023-03-14

只是一种预感:你提到要实际使用公式,如果你在表格上按enter键,“总和有效”。应用公式是两行的,除了设置“值”,还需要将单元格类型格式化为公式:

XSSFRow row = worksheet.getRow(rowIndex);
XSSFCell cell = row.getCell(cellIndex);
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("sum(start:end)");

编辑:您还需要确保使用XSSF类

洪研
2023-03-14

我通过将秒除以86400来获得十进制值,然后使用[hh]: mm作为数据格式来修复它。

c.setCellValue(clockedSeconds / 86400)  // 24(hours) * 60(minutes) * 60(seconds) = 86400
 类似资料:
  • 给定一个非空字符串s和一个包含非空单词列表的字符串数组wordArr,确定s是否可以被分割成一个或多个字典单词的空格分隔序列。您可以假定字典不包含重复的单词。 例如,给定s=“leetcode”,wordArr=[“leet”,“code”]。 返回true,因为“leetcode”可以分段为“leetcode”。 这是正确的吗?

  • 问题内容: 如何获得仅包含a到z,A到Z,0到9和一些符号的字符串? 问题答案: 您可以使用以下命令测试您的字符串(让): 如果需要更多符号,可以在之前添加它们

  • 问题内容: 我正在尝试创建一个菜单栏应用程序,以隐藏桌面图标以及希望进行其他各种操作,主要是为了更多地了解Swift,并且由于某种原因,我无法使其正常工作。当我运行该程序并单击菜单项之一时,什么也没有发生,并且我在控制台中收到此警告: 其他命令也可以,但是我尝试使用“ killall”的任何变体都会吐出类似上面的内容。目前,我的代码如下所示: 我已经和Google上找到的可接受的解决方案进行了多种

  • 问题内容: CSS标识符和的(完整)有效/允许的 字符集 字符是什么? 是否可以使用正则表达式进行验证?它与浏览器无关吗? 问题答案: 字符集无关紧要。允许的字符更重要。检查CSS规范。这里是相关的: 在CSS中,标识符(包括选择器中的元素名称,类和ID )只能包含字符和ISO 10646 及更高版本的字符,以及连字符()和下划线();它们不能以数字,两个连字符或连字符后跟数字开头。标识符还可以包

  • 问题内容: 我在这里的研究中得到了不同的答案。 有人可以验证Redis服务器只能存储任何数值的表示吗? 例如,如果我在lpush中使用具有双重类型的Java客户端(Jedis),在发送给Redis之前是否需要将其转换为等效于字符串类型的内容? 还是有一种方法可以发送诸如double之类的实际数字类型?如果是这样,是否有任何示例代码说明了如何实现此目的? 谢谢 问题答案: Redis将所有内容存储在

  • 我有一个小时的时间。 lastUpdate是这样的类型字符串:“20190925141100”我尝试解析last使用RFC3339类型更新并获取小时。但是,系统返回 t= 0001-01-01 00:00:00 0000 。我的问题在时间。解析?我错过了什么?