我有一个要求,我需要得到一些excel公式字段的基础上的值。在较高的层次上,我们有一个excel,用户可以自由地输入日期值,并根据这些输入更新公式字段和计算总收入字段值。现在要通过代码执行这些验证
用java为电子表格中的每个公式编写自己的实用程序。
在运行时使用apachepoi在电子表格中输入值,并计算公式以获得收入值。
关于方法1,我有以下问题:关于实现以下代码 =YEARFRAC(B1, B2+1)*12
公式
public static double calculateContractLength(String startdate,String enddate) {
double monthsBetween = ChronoUnit.MONTHS.between(
LocalDate.parse(startdate),
LocalDate.parse(enddate));
return monthsBetween;
}
我看到excel公式和以上代码的结果不匹配。例如,start date=2/12/2020 end date=12/31/2022,我看到excel显示34.63,但代码返回34.0
为了更好地处理,我想知道是否有一些现有的库已经实现了这些电子表格公式,或者只是在运行时用apachepoi更新excel会是一个更好的解决方案。
1条答案
按热度按时间ibps3vxo1#
我倾向于从文件中了解
yearfrac
函数(底部的链接),当给定两个参数(如您的示例中所示)时,它将在一个月内计30天。我不知道您的java代码是否需要完全相同的功能。无论如何,这是我试图模仿的:从你的问题开始尝试这个例子,期望值为34.63:
输出为:
34.63333333333333
我也试过了例子中的日期
yearfrac
文档:文件上说结果是0.58055556年,所以应该是0.58055556*12个月=6.966672个月。我们得到:
6.966666666666667
在角落的情况下,可能还会有(稍微大一点的)差别。月份的分数没有很好的定义。ms文档中有一个标志(如果相同):
使用us(nasd)30/360基准时,yearfrac函数可能返回不正确的结果,并且开始日期是2月份的最后一天。
链接
yearfrac函数的文档