用Java表示Excel公式(小数到时间的解释)

时间:2020-03-06 14:54:15  来源:igfitidea点击:

我正在将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/