【数据分析】帆软报表填报预览中js的调用

以下原文链接:https://help.finereport.com/doc-view-1193.html
参考:https://www.cnblogs.com/yijiaming/p/8458484.html

1. 描述

在对数据进行填报的时候,经常会需要使用 JavaScript 对一些功能进行二次开发,比如说设置填报单元格是否可以编辑,给单元格控件进行赋值等等。

参数面板 类似,首先需要获取 填报预览 下的控件或者单元格,才能对其进行各种方法操作。

不同于参数界面 JavaScript 的是:填报页面下有一个特殊性,既有单元格又有控件,通过控件来输入数据,编辑数据,控件编辑结束之后,会自动将值传递给控件所在的单元格,所以 JavaScript 获取的时候即可获取到单元格也可以获取到控件,获取单元格只能取值和赋值。

2. 单元格

2.1 获取单元格的值

获取填报页面的单元格的值,有以下几种方法:

contentPane.getCellValue(sheet号,列号,行号);  //sheet号行号列号是从0开始  
contentPane.curLGP.getCellValue(列号,行号);    
contentPane.curLGP.getCellValue(单元格);     
contentPane.curLGP._get$TDCell(col,row).text()//获取单元格显示值  
contentPane.curLGP._get$TDCell(单元格).text()

由于单元格可以设置形态来改变其显示值,故 JavaScript 获取单元格有获取实际值和显示值的区分。

注:使用 contentPane.curLGP.getCellValue(列号,行号)获取值时不能使用 contentPane.curLGP.getCellValue(列号,“A1”)这种形式,可先将 A1 单元格值赋给一个变量再用变量替换。

2.2 给单元格赋值

赋值的方式也分为赋显示值和赋实际值,如下:

contentPane.setCellValue(sheet号,列号,行号,值); //sheet号行号列号是从0开始  
contentPane.curLGP.setCellValue(列号,行号,值);//给单元格赋显示值,非实际值,不能提交入库     
contentPane.curLGP.setCellValue(单元格,null,值);//给单元格赋显示值,非实际值,不能提交入库  
contentPane.setCellValue(列号,行号,值);//给单元格赋实际值,可以提交入库  
contentPane.setCellValue(单元格,null,值);//给单元格赋实际值,可以提交入库

2.3 获取当前单元格行列号

上述给取单元格的值和赋值均是确切知道单元格行列号的,那么,如果单元格行列号是动态的,比如说,修改当前编辑行的单元格的值,那么怎么才能定位到该单元格呢?其 JavaScript 代码如下:

contentPane.curLGP.getTDRow(contentPane.curLGP.currentTDCell)//获取行号
contentPane.curLGP.getTDCol(contentPane.curLGP.currentTDCell)//获取列号<br>

2.4 单元格行列号和单元格的转换

1)行列号转换为单元格

能够获取到一个行号 row 和一个列号 col,希望得到该行列号对应的单元格,JavaScript 代码如下:

FR.columnRow2CellStr({col:1, row:0});//该公式的返回值为B

2)单元格转换行列号

知道具体的单元格,希望得到定位该单元格的行列号,JavaScript 代码如下:

FR.cellStr2ColumnRow('B1');

3. 控件

获取填报页面的控件,首先要获取到当前的填报页面对象

3.1 获取填报页面控件

1)直接在FR模板中获取填报控件

首先获取到填报页面对象,直接在 FR 模板中使用 JavaScript,其填报页面对象直接使用 contentPane 即可获取到,那么获取控件的 JavaScript 为:

contentPane.getWidgetByName("widgetname");//根据控件名

contentPane.getWidgetByCell("Cell");//根据控件名所在位置

填报控件是与单元格绑定的,如果单元格可扩展,那么控件也可以扩展,故为扩展出多个同名的填报控件,类似这种获取多个同名控件的 JavaScript 方法为:

contentPane.getWidgetsByName("widgetname")

注:使用 contentPane.getWidgetsByName 的时候,返回的是数组。

2)在 Web 集成页面中获取 FR 填报控件

在 Web 页面中获取 FineReport 填报报表对象的 JavaScript 为:

document.getElementById('reportFrame').contentWindow.contentPane

那么其获取控件的 JavaScript 为:

document.getElementById('reportFrame').contentWindow.contentPane.getWidgetByName('widgetname')

获取多个同名控件的 JavaScript 代码为:

document.getElementById('reportFrame').contentWindow.contentPane.getWidgetsByName('widgetname')

注:其中 reportFrame 是 Web 页面中嵌入 FineReport 报表的 iframe

3.2 填报控件方法列表

获取到控件之后,需要对该控件进行再操作,可以获取其控件值,赋值,设置是否可见等等方法,如下列表:

方法名方法说明
取实际值Widget.getValue()获取控件实际值
取显示值Widget.getText()获取控件的显示值
赋实际值Widget.setValue()给参数控件赋值,不建议给填报控件赋实际值
赋显示值Widget.setText()给参数控件赋显示值
可见Widget.visible()设置控件可见
不可见Widget.invisible()设置控件不可见
是否可见Widget.isVisible(boolean)返回控件是否可见,返回 true 可见,false 不可见
设置可见Widget.setVisible(boolean)设置控件是否可见,参数为 true 可见,false 不可见
设置可用Widget.setEnable(boolean)设置控件是否可用,参数为 true 可用,false 不可用
是否可用Widget.isEnabled()返回控件是否可用,返回 true 可用,false 不可用
调用控件事件Widget.fireEvent(“事件名称”)设置控件触发指定名字的事件

其中 Widget 为获取到的控件

注:如果用 setValue()给下拉树赋值,需要添加一个 false 参数,即 setValue(value,false);value为需要赋给下拉树的值

提醒:填报页面上最后显示填报入库的值都是单元格的值,通过填报控件编辑数据,当编辑结束之后,控件会自动将值传递给当前单元格,故,如果通过 JavaScript 代码给控件赋值,只有被赋值的控件处于被编辑的状态时,最后才能在单元格中显示出来,如果控件处于非编辑状态,使用控件赋值,是不起作用的,所以,强烈建议用户在获取填报单元格的值或赋值的时候尽量使用 getCellValue 和 setCellValue

4. 示例链接

获取填报预览单元格应用请查看 获取填报预览单元格

给填报单元格赋值请查看 填报控件(单元格)赋值给扩展单元格置数给文本框赋多个值

JavaScript代码对填报数据进行校验请查看 JS 校验

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值