【问题标题】:Expressing Excel formula in Java (decimal to time interpretation)用Java表达Excel公式(十进制到时间的解释)
【发布时间】:2008-09-30 02:08:36
【问题描述】:

我正在将 excel 工作表公式转换为 java,但我不明白 excel 如何设法获取以下内容:0.22 应用公式:=TEXT(R5/14, "h:mm") 并以某种方式到达:0.22

如果我再次提供:2.8 它到达 4.48 有人可以向我解释它是如何做到的。我已经阅读了一些关于十进制的内容,并且我理解转换,但这还没有帮助解释上述内容。

【问题讨论】:

  • 需要澄清一下:它需要 0.22,应用公式并达到 0.22?如果提供 2.8,它返回 4.48?

标签: java excel datetime decimal


【解决方案1】:

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”)。

【讨论】:

    【解决方案2】:

    或者用于 Java 的 Abacus 公式编译器,它允许您将 Excel 工作表中的公式直接编译为 Java 字节码,以便从您的 Java 应用程序中快速轻松地调用(无需 JDK 即可在运行时编译)。

    http://www.formulacompiler.org/

    【讨论】:

      【解决方案3】:

      是的,这有点傻。取出 /14 会有帮助。基本上 1 = 1 天,因此 R5 以一天的 14 表示。你可能会这样做

      int msInADay= 86400000;
      Time value = new Time(R5/14 * msInADay);
      

      但它未经测试。

      【讨论】:

        【解决方案4】:

        感谢克里登斯。

        它适用于: 双 r = 0.22; 双驱动时间 = (r / 14) * 1440;

        【讨论】:

          【解决方案5】:

          可以在 OpenFormula 规范(其中记录/定义 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

          【讨论】:

            猜你喜欢
            • 2013-11-06
            • 1970-01-01
            • 1970-01-01
            • 2023-03-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-27
            相关资源
            最近更新 更多