用Java表达Excel公式(小数转时间解释)
题
我正在将 excel 工作表公式转换为 java,但我无法理解 excel 如何设法获取以下内容:0.22应用公式:=文本(R5/14,“ H:MM”),并以某种方式到达:0.22
如果我再次提供:2.8 到达 4.48 谁能解释一下它是如何做到这一点的?我读过一些有关十进制的内容,并且理解了转换,但这还不足以解释上述内容。
解决方案
Excel 将日期时间值存储为:
- 小数点左边的数字表示自 1900 年 1 月 1 日以来的天数
- 小数点右边的数字代表一天 24 小时的小数部分
在您的示例中,您将小数转换为日期时间值的小时和分钟部分的文本表示形式。
通过您的第一个公式,0.22 除以 14(您为什么这样做?)等于 0.015714286。如果您将此分数应用于一天 24 小时(乘以 1440 分钟),则它等于 22 分钟加上一些变化(即“0:22”)。
计算第二个公式,2.8 除以 14 等于 0.2。乘以 1440,等于 288 分钟,即 4 小时 48 分钟(即“4:48”)。
其他提示
或者用于 Java 的 Abacus 公式编译器,它允许您将 Excel 工作表中的公式直接编译为 Java 字节代码,以便从 Java 应用程序快速轻松地调用(可以在运行时编译,无需 JDK)。
是的,这有点愚蠢。把 /14 去掉就会有帮助。基本上 1=1 天,因此 R5 表示为一天的 14 分之一。你也许可以做
int msInADay= 86400000;
Time value = new Time(R5/14 * msInADay);
但它未经测试。
谢谢克里登斯。
它适用于:双 r = 0.22;双驱动时间 = (r / 14) * 1440;
电子表格内部的非常好的文档可以在 OpenFormula 规范(其中文档/定义 OpenOffice-Calc)中找到。
http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula
如果您寻求 Java 库来评估 Excel 公式,Apache-POI 或 Pentaho 的 LibFormula 可能会有所帮助:
库公式: http://sourceforge.net/project/showfiles.php?group_id=51669&package_id=213669