用Java表示Excel公式(小数到时间的解释)
我正在将excel工作表公式转换为java,但是我不明白excel如何管理以下内容:0.22
应用公式:= TEXT(R5 / 14," h:mm")
并且以某种方式到达:0.22
同样,如果我提供:2.8
到达4.48
有人可以向我解释一下它是如何做到的。我已经读了一些有关十进制的内容,并且我理解转换,但这并不能解释上面的内容。
解决方案
是的,这有点愚蠢。取出/ 14,这会有所帮助。基本上是1 = 1天,因此R5以一天的14分表示。你可能可以做
int msInADay= 86400000; Time value = new Time(R5/14 * msInADay);
但未经测试。
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")。
感谢Creedence。
它适用于:
双倍r = 0.22;
double driveTime =(r / 14)* 1440;
可以在OpenFormula规范中找到有关Spreadsheet-internals的很好的文档(该文档对OpenOffice-Calc进行了定义/定义)。
http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula
如果我们寻求Java库来评估Excel公式,则Apache-POI或者Pentaho的LibFormula可能会有所帮助:
兴趣点:http://poi.apache.org/
LibFormula:http://sourceforge.net/project/showfiles.php?group_id=51669&package_id=213669
或者Java的Abacus Formula Compiler,它使我们可以将Excel工作表中的公式直接编译为Java字节代码,以便从Java应用程序中快速,轻松地进行调用(无需JDK即可在运行时进行编译)。
http://www.formulacompiler.org/