我正在尝试在生成电子表格时实现几个公式 . 我已经实现了一个简单的SUM()公式 . 现在我正在尝试实现一个使用EDATE()的方法 . 这是原始电子表格中显示的公式:
= EDATE($ AQ $ 1, - (AC4))
// this formula works - summing the previous two cells in each row
var formula = "SUM(AA4:AB4)";
sheet.getRow(3).getCell(28).setCellFormula( formula );
// problem formula
// cell AQ1 is populated by Oracle date
// cell AC4 is populated by a float from the previous formula
formula = "EDATE($AQ$1,-(AC4))";
// throws "Not implemented yet" error
sheet.getRow(3).getCell(29).setCellFormula( formula );
根据poi文档,EDATE应该被实现 . 我试图获取支持的函数名称,以查看我的实现是否没有实现它,但在下面的第一行有一个“未找到类:org.apache.poi.ss.formula.eval.FunctionEval”错误:
var fe = createObject("java","org.apache.poi.ss.formula.eval.FunctionEval");
var fs = fe.getSupportedFunctionNames();
var fu = fe.getNotSupportedFunctionNames();
我开始时对Excel不是很了解;我有没有机会宣布这个公式不正确?
EDIT:
Per Leigh的提示如下,我决定尝试使用其他Excel公式来完成EDATE正在做的事情 . 起初,我认为使用无效月份(<1或> 12)创建日期是不可能的......但是,请注意,DATE函数确实接受无效月份 . 所以,这就是我提出的:
=DATE(YEAR($AQ$1),SUM(MONTH($AQ$1),-INT(AC4)),DAY($AQ$1))
希望这会让我不用担心更新POI或等待CF11最终获得批准 .
1 回答
它是,但它是在较新版本的POI中实现的 . 由于听起来您使用的是与CF10捆绑在一起的原始POI jar,因此您受到旧版本支持的任何功能的限制,遗憾的是不包括
EDATE
. 您需要使用更新版本的POI . FWIW,该功能在CF11下运行,后者附带POI 3.9(参见示例) . 所以你至少需要POI 3.9(最好是新的) .对于CF10,最简单的选择是下载更新版本的POI并通过新设置this.javaSettings在Application.cfc中动态加载它 . 它基本上是Mark Mandel's JavaLoader.cfc的一小部分 . 只需指定要加载的各个 jar 的路径,或指定要检查 jar 的整个目录,即
Runnable EDATE Example (CF11+)