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

本文详细介绍了在FineReport中如何使用JavaScript对填报控件和单元格进行操作,包括获取和设置单元格的值,转换单元格与行列号,以及获取和设置控件的值和属性。提供了丰富的示例代码,帮助开发者更好地理解和掌握填报功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下原文链接: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 校验

<think>我们正在处理一个关于帆软报表的问题:用户希望在帆软报表中配置复选组件,使其在打印预览时正常显示。具体来说,用户的问题是如何在填报预览中设置复选组件以确保打印时显示正常。 根据帆软报表的特性,复选组件(复选框)通常用于填报场景,允许用户选择多个选项。在打印预览时,我们希望看到用户选择的结果(即选中的选项)被正确显示。 步骤分析: 1. 确保复选组件的数据绑定正确,这样在填报时用户的选择可以存储到相应的字段中。 2. 在打印预览时,我们需要展示用户选择的结果。由于复选组件在填报预览时是交互式的,但在打印预览时我们需要将其转换为静态文本(即显示选中的)。 3. 因此,我们可能需要两个地方: - 填报预览:使用复选组件(如复选框控件)以便用户选择。 - 打印预览:使用一个单元格来显示选中的,该单元格绑定到复选组件所绑定的字段。 具体操作步骤: 1. 设计报表模板时,在填报预览单元格中插入复选框控件,并设置其数据字典(即选项列表)以及绑定字段(例如,字段名为`choices`)。 2. 在同一个单元格(或另一个专门用于显示的单元格)中,设置一个公式或直接引用字段,以便在非填报状态下(如打印预览)显示选中的。但是注意,在填报预览时,我们希望显示的是复选框控件,而在打印预览时,我们希望显示的是选中的文本。 帆软报表提供了条件属性的功能,我们可以根据不同的查看模式来显示不同的内容。然而,在同一个单元格中,我们无法同时既显示控件又显示静态文本。因此,通常的做法是: - 在填报预览时,我们显示复选框控件。 - 在打印预览时,我们隐藏复选框控件,并显示一个文本控件(即直接显示字段)。 但是,帆软报表单元格内容在设计和运行时是固定的。因此,更常见的做法是使用两个单元格: - 一个单元格用于填报预览(放置复选框控件),另一个单元格用于显示打印时的(放置表达式,显示选中的)。然后,通过条件属性控制这两个单元格的可见性。 然而,这样会占用两个单元格的位置,可能不符合布局要求。 另一种方法是:使用同一个单元格,但在不同的状态下显示不同的内容。帆软报表提供了条件显示功能,但控件和普通文本的切换可能无法直接实现。 因此,我们可以尝试以下方案: 1. 在需要放置复选框的单元格中,插入复选框控件,并绑定字段(假设字段名为`field1`)。 2. 在单元格的属性中,设置“扩展方式”为“不扩展”(因为复选框一般是多选,但实际存储可能是字符串,如用逗号分隔的选项)。 3. 在打印预览时,我们希望直接显示选中的(即`field1`的)。但是,在填报预览时,该单元格显示的是复选框,而在打印预览时,该单元格显示的是静态文本(即字段)。如何实现切换? 实际上,帆软报表的控件在非填报预览状态下是不显示的,而是直接显示控件的(即字段的)。所以,在打印预览时,复选框控件会自动隐藏,而显示其(即选中的选项,以逗号分隔的字符串形式显示)。但这样显示可能不够美观,因为直接显示的是存储(如"选项1,选项2"),而不是我们想要的格式(如“选项1,选项2”)。 所以,问题在于: - 如果我们在填报预览时使用复选框控件,那么在打印预览时,该单元格会自动显示控件的(即实际存储的),但格式是原始存储格式(如逗号分隔的字符串)。 - 如果我们想要在打印预览时显示更友好的文本(如将存储的转换为对应的显示文本),那么我们需要对存储的进行转换。 因此,我们需要: 1. 在复选框控件中,我们设置了数据字典(将实际和显示文本对应起来)。但是,在存储时,存储的是实际(多个用逗号分隔)。 2. 在打印预览时,我们希望显示的是对应的文本(多个文本用逗号分隔)。所以,我们需要一个公式将存储的字符串(如"v1,v2")转换为显示文本(如"选项1,选项2")。 帆软报表提供了`REPLACE`函数和`MAPARRAY`等函数来处理这种转换,但比较复杂。另外,我们也可以使用自定义显示的方式。 具体步骤: 1. 在模板中,假设复选框控件放在A1单元格,绑定字段为`field1`。 2. 在打印预览时,我们希望A1单元格显示的是选中的文本。但是,在填报预览时,A1单元格显示的是复选框控件。 3. 为了实现这个转换,我们可以利用帆软报表的显示功能。在单元格的“形态”设置中,我们可以设置“数据字典”形态,然后选择“公式形态”,用公式将存储的转换为显示文本。 但是,注意:复选框控件存储的是多个的拼接字符串(如"v1,v2"),而数据字典形态中的公式形态可以处理这种字符串。我们可以设置一个公式形态,将存储的转换为对应的显示文本。 设置形态的步骤: - 选中A1单元格,在右侧属性面板中找到“形态”设置。 - 选择“公式形态”,在表达式框中输入一个公式,该公式能够将存储的(如"v1,v2")转换为对应的显示文本(如"选项1,选项2")。 - 公式示例:我们可以使用`REPLACE`函数和`SPLIT`函数(但帆软报表中可能没有直接的SPLIT函数)?实际上,我们可以使用`array`函数和`in`函数结合数据字典来转换。 然而,帆软报表提供了“数据字典”形态,我们可以直接使用数据字典来转换。具体步骤如下: - 在A1单元格的“形态”设置中,选择“数据字典”,然后设置数据字典(与实际复选框控件的数据字典一致)。 - 在“数据字典”形态中,有一个“实际”和“显示”的映射表。 - 然后,在“分隔符”中,设置实际之间的分隔符(如逗号)和显示之间的分隔符(如逗号)。 - 这样,当单元格是多个实际用分隔符连接时,会自动将其转换为对应的显示并用显示分隔符连接。 因此,我们只需要在A1单元格的形态中设置与复选框控件相同的数据字典,并设置分隔符(实际分隔符为逗号,显示分隔符为逗号),那么当打印预览时,A1单元格就会自动显示为多个显示用逗号分隔的字符串。 总结步骤: 1. 设计报表模板: - 在A1单元格插入复选框控件,设置控件名(即绑定字段)为`field1`。 - 设置复选框控件的数据字典(例如,实际:v1, v2;显示:选项1, 选项2)。 - 设置复选框控件的分隔符(实际分隔符为逗号,显示分隔符为逗号)?注意:控件本身在存储时就是用逗号分隔多个实际的。 2. 在A1单元格的形态设置中,设置“数据字典”形态(与复选框控件的数据字典相同),并设置实际分隔符为逗号,显示分隔符为逗号(或你想要的任意分隔符,如空格、分号等)。 3. 这样,在填报预览时,A1单元格显示复选框控件,用户可以选择多个选项。在打印预览时,A1单元格将显示选中的选项的显示文本,用指定的分隔符连接。 注意:在打印预览时,单元格的显示将根据形态设置自动转换。因此,我们不需要额外的条件属性来控制显示。 但是,有一个问题:在填报预览时,复选框控件已经使用了数据字典,而单元格形态又设置了一个数据字典,会不会冲突?实际上,在填报预览时,控件会覆盖单元格的形态显示(即控件优先),而在非填报状态下(如打印预览),单元格形态就会起作用。 因此,按照上述步骤设置后,应该能够满足需求。 另外,关于打印预览的显示,可能还需要调整单元格的样式(如自动换行等),以确保长文本能够正常显示。 引用说明: - 关于单元格形态的设置,可以参考文档中关于“形态”的部分(如引用[1]中提到的格式设置,但引用中并未详细说明形态,所以这里我们根据的功能进行说明)。 - 关于复选框控件的设置,可以参考文档中关于“复选框控件”的部分(引用[3]提到参数界面自定义,但复选框控件也是参数界面的一种控件)。 因此,用户的问题可以通过上述方法解决。 生成相关问题: 1. 帆软报表中如何设置复选框控件的数据字典? 2. 帆软报表单元格形态有哪些类型?分别有什么作用? 3. 帆软报表中如何控制不同预览模式(填报预览、打印预览)下的显示内容? 4. 帆软报表中如何将复选框存储的转换为显示文本? 5. 帆软报表打印预览时如何调整单元格样式以适应长文本?</think>### 帆软报表复选组件打印预览设置指南 在帆软报表中,确保复选组件在打印预览时正常显示需通过以下步骤配置: #### 一、核心设置步骤 1. **控件绑定与形态设置** - 在单元格中插入「复选按钮组」控件 - 设置控件名(如`checkbox1`)并绑定数据字段 - 在「单元格属性 > 形态」中配置数据字典: ```bash 实际 | 显示 value1 | 选项1 value2 | 选项2 ``` - 勾选「返回字符串」并设置分隔符(如逗号`,`) 2. **打印显示转换** - 在复选组件旁新建显示单元格(如B1) - 设置显示单元格公式: ```bash =REPLACE($$$, ",", ",") // 将存储转为带分隔符的文本 ``` - 通过「条件属性」控制显示逻辑: ```bash 条件:$$$ != null 且 预览模式=打印 动作:隐藏原控件(A1),显示文本单元格(B1) ``` 3. **样式优化** - 在「单元格属性 > 样式」中: - 对齐方式:垂直居中 - 自动调整行高:勾选 - 文本控制:自动换行 - 打印专用样式设置: ```bash 边框:实线(0.5pt) 背景色:无填充 ``` #### 二、关键注意事项 1. **数据存储验证** - 填报预览时测试数据存储格式 - 确保分隔符与显示公式一致(如中英文逗号区分) 2. **打印专用模板** - 建议创建打印专用模板副本 - 通过参数控制显示模式: ```bash 设计器 > 模板 > 模板参数 添加 isPrint=1 ``` 3. **组件渲染模式** - 禁用AJAX渲染(设计器 > 服务器 > 打印设置) - 勾选「静态导出」选项 #### 三、调试技巧 1. **日志检查** - 查看设计器日志:`designer_error.log` - 服务器日志:`server_error.log`[^2] 2. **常见问题处理 - 不显示问题:检查数据字典绑定路径 - 丢失:验证控件名与字段名一致性 - 样式异常:清除浏览器缓存强制刷新 > **配置示例**: > 当选择「技术部, 市场部」时,打印单元格显示: > `☑ 技术部 ☑ 市场部`(通过形态转换实现) 通过以上设置,复选组件在填报预览时可正常交互,打印预览时自动转换为静态文本显示,确保输出效果稳定可靠[^1][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值