finereport的js有哪些功能?,怎么用?
- 云服务器
- 2026-07-23
- 6
常见使用场景
FineReport 中的 JavaScript 主要应用于以下场景:
- 报表加载时执行初始化逻辑(如参数赋值、默认值设置)
- 响应控件事件(如点击、变更、下拉选项)
- 实现图表交互(点击、悬停、钻取)
- 自定义按钮、超链接触发复杂业务逻辑
- 动态修改报表内容(隐藏行、列、单元格样式)
- 与后端数据库或服务通信(通过 FR 提供的远程调用方法)
- 控制报表参数、获取或修改参数值
常用 API 与方法
| 方法/对象 | 说明 | 示例 |
|---|---|---|
| contentPane.parameterEl.getParameter(parName) | 获取参数对象 | var p = contentPane.parameterEl.getParameter("year"); |
| contentPane.parameterEl.setParameter(parName, val) | 设置参数值 | contentPane.parameterEl.setParameter("year", "2024"); |
| contentPane.parameterEl.commit() | 提交参数,触发报表查询 | contentPane.parameterEl.commit(); |
| contentPane.curLGP.setCellValue(sheet, col, row, value) | 修改单元格值 | contentPane.curLGP.setCellValue(0, 1, 2, "新值"); |
| contentPane.curLGP.writeReport() | 刷新报表 | contentPane.curLGP.writeReport(); |
| FR.Chart | 图表对象,可绑定事件、获取系列 | FR.Chart.fireEvent("chart1", "click", ...) |
| FR.doHyperlinkByPost(url, params) | 执行超链接跳转(POST) | FR.doHyperlinkByPost({url: "报表.cpt", params: {a: 1}}); |
| FR.remoteEvaluate(script, callback) | 远程执行服务器端脚本 | FR.remoteEvaluate("return 1+1", function(r){alert(r);}); |
| this.options.value | 获取当前控件值(在控件事件中) | var v = this.options.value; |
| FR.Message.show(msg) | 弹出提示消息 | FR.Message.show("保存成功"); |
| FR.msg(msg) | 简化消息提示(新版本建议使用 FR.Message) | FR.msg("提示信息"); |
事件绑定方式
报表事件
在 模板 > 报表块属性 > 事件 中可添加:
- 加载前(beforeLoad)
- 加载后(afterLoad)
- 渲染前(beforeRender)
- 渲染后(afterRender)
控件事件
选择控件,在 属性 > 事件 中添加:

- 编辑前(beforeEditor)
- 编辑后(afterEditor)
- 值变更(valueChanged)
- 点击(click)等
图表事件
选择图表,在 图表属性 > 事件 中支持:
- 点击、双击、悬停、鼠标移出等
- 常用方法:FR.Chart.on("chartID", "click", function(data) { ... })
参数获取与设置示例
获取参数值(报表加载后)
设置参数并查询
contentPane.parameterEl.setParameter("year", "2025"); contentPane.parameterEl.commit();
图表交互示例
给图表添加点击事件
FR.Chart.on("chart1", "click", function(evt, data) { var seriesName = data.seriesName; var category = data.category; var value = data.value; FR.Message.show("点击了系列:" + seriesName + ",分类:" + category); // 跳转示例 FR.doHyperlinkByPost({ url: "/report?reportlet=detail.cpt", params: { category: category } }); });
控件联动示例
下拉框A变更时,更新下拉框B的选项

// 在A的 valueChanged 事件中编写 var aVal = this.options.value; var b = contentPane.parameterEl.getParameter("B"); b.setOptions([{value: "1", text: "基于A的选项1"}, {value: "2", text: "基于A的选项2"}]); // 如果希望清空B并重新加载 b.setValue(""); b.commit();
动态修改单元格内容
var lg = contentPane.curLGP; lg.setCellValue(0, 1, 2, "新文本"); // 参数:sheet索引,列,行,值 lg.writeReport(); // 刷新显示
远程调用(服务器端脚本)
FR.remoteEvaluate("return new Date()", function(result) { FR.Message.show("服务器时间:" + result); });
注意事项
- 大部分 JS 需在报表加载完成后执行(如 afterLoad 事件中)。
- 获取控件值时,建议使用 this.options.value(在控件事件中),或 contentPane.parameterEl.getParameter("name").getValue()。
- 图表事件中的 data 对象包含 seriesName、category、value 等属性,具体取决于图表类型。
- 避免在加载前事件中做耗时操作,可能影响报表渲染速度。
相关问题与解答
问题1: 如何在 FineReport 中使用 JavaScript 隐藏或显示某个单元格?
解答: 可以通过修改单元格的样式或行高/列宽实现,例如在报表加载后事件中:
// 隐藏第2行(行索引从0开始) contentPane.curLGP.setRowHeight(0, 1, 0); // 参数:sheetIndex, rowIndex, height // 或隐藏列 contentPane.curLGP.setColumnWidth(0, 2, 0); // 若要显示,将高度/宽度设为正数即可
也可以使用 contentPane.curLGP.removeRow(0, 1) 删除行,但不可逆,建议使用调整高度/宽度方式。
问题2: 在 FineReport 中,如何通过 JavaScript 实现点击按钮后导出当前报表为 Excel?
解答: 在按钮的超链接或点击事件中调用内置导出动作:
// 方法1:直接用超链接,类型选择“JavaScript”,输入: FR.exportToExcel({ url: "导出接口", format: "excel", // 或 "excel2007", "csv", "pdf" 等 fileName: "自定义文件名" }); // 方法2:使用 FR 封装的导出方法(需在决策平台或报表中配置) FR.doExport({ url: contentPane.servletURL, format: "excel", isExcel: true }).then(function() { FR.Message.show("导出成功"); }); // 注意:实际导出需要服务器端支持,若在外部URL调用,需提供完整servlet地址。
建议使用设计器自带的“导出”按钮,或通过超链接-类型-导出直接配置,更简单可靠。
