解决FineReport函数公式不足的问题

楼主
我是社区第234442位番薯,欢迎点我头像关注我哦~
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  
分享扩散:

沙发
发表于 2019-8-29 11:54:17
为解决这个函数不足的问题,学习JAVA,学习JS,困扰了很久,formula.js官方给的源码下载地址并没告诉函数使用方法,百度能看到的formula.js资料也寥寥无几;从学习js到学习webpack,就这样一直持续了四个月,我这个菜鸟把问题解决。不容易啊! 编辑于 2019-8-29 22:18  
板凳
发表于 2019-8-29 16:23:28
向老司机,致敬!
地板
发表于 2019-8-30 08:43:19
5楼
发表于 2019-11-18 15:30:01
如果添加到服务器配置里,就不用每个模板单独去加载了,也有利于减少页面加载时间

6楼
发表于 2019-11-19 22:37:12
高大上 还没有看懂
7楼
发表于 2019-11-20 13:56:30
师兄好样的,学习了~
8楼
发表于 2019-11-20 14:12:50
idragonet 发表于 2019-11-19 22:37
高大上 还没有看懂

看帮助文档,JS应用office函数公式formula.js库-https://help.finereport.com/doc-view-2933.html   
9楼
发表于 2020-7-10 22:32:41
顶上去
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表