【数据分析】帆软报表填报预览中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)//获取列号

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 校验

你可能感兴趣的:(数据分析)