FineReport自带有很多函数,但是还是缺少一些office自带的函数。例如:TREND(),这个问题困扰了我很久,现在终于有了一个解决方案,就是加载外部js文件。通过js调用这些函数。现在进入实操,先下载 附件formula.zip,解压缩,将formula文件夹放置在WebRoot下,新建报表模板,进入模板web属性,
选择引用 js
依次增加formula文件夹下的
numeric.min.js
numeral.min.js
jstat.js
formula.js
这样formula.js及其依靠的js被加载进入模板。
下来就是使用,formula的函数。
使用方法就是 formulajs.函数名称,区分大小写。函数名称可以查看formula.js对函数名称的定义,目前formula支持office2007版全部公式。
//使用前可以用Notepad++打开formula.js查找对TREND()函数参数的定义,exports.TREND = function(data_y, data_x, new_data_x);正确的用法是TREND(数组Y,数组X,待查数组);
var data_y=new Array();//新建数组;
var data_x=new Array();//新建数组;
var new_data_x=new Array();//新建数组;
data_y.push(contentPane.curLGP.getCellValue("A1"));//获取单元格的值并添加到数组data_y
data_y.push(contentPane.curLGP.getCellValue("A2"));
data_x.push(contentPane.curLGP.getCellValue("B1"));//获取单元格的值并添加到数组data_x
data_x.push(contentPane.curLGP.getCellValue("B2"));
new_data_x.push(contentPane.curLGP.getCellValue("C1")); //获取单元格的值并添加到数组new_data_x
var ak=formulajs.TREND(data_y,data_x,new_data_x);//使用函数TREND
contentPane.setCellValue("D1",null,ak);//将计算结果赋值给单元格D1
添加按钮控件,给按钮添加点击事件,复制上面代码到点击事件下。
计算前
计算后
如果加上JS参数,上面的代码更简洁。缺点就是数据不能实时根据填写内容动态变化,只能跟随页面加载。
测试结果显示函数被正常调用。源码地址
https://github.com/sutoiku/formula.js/
用Notepad++打开,统计共计428个公式。用法和ecxel一致。
编辑于 2019-8-30 20:46
|