1 概述
lczExcel拥有二次开发的能力,用户可基于报表JS脚本+扩展控件实现根据其他单元格来动态控制某个单元格的控件类型,目前支持的控件类型包括:单行文本输入框、数值输入框、日期控件、下拉控件、树控件。
本文档适合的读者:
● 掌握了一定的Html、JavaScript、CSS基础知识;
● 希望通过乐创者报表扩展控件实现动态控件功能的用户。
2 典型案例
简单案例,如下图所示:
预期E5单元格的控件类型可以跟随D5单元格动态构建。
即:
- 如果D5扩展出来的单元格值是数值型,则E5同行的单元格显示为数值输入框,并能指定数值相关的控制,如最大值、最小值等;
- 如果D5扩展出来的单元格值是字符型,则E5同行的单元格显示为单行文本输入框,并能指定数值相关的控制,如最大长度、最小长度等;
3 设计实现步骤
3.1 引入报表JS脚本
点击报表“JS脚本”弹出JS脚本设置窗口,进行JS文件引用,也可进行JS脚本编辑:
extendEditor.js的内容格式为:
var extendEditorOptions = {
"文本输入框" : {
"type" : "input",
"show" : true, //控件是否直接显示,true:直接显示(适合于控件不是特别多的情况);false:点击单元格时显示,焦点离开后控件消失
"defaultValue" : { //默认值
"value" : "", //值
"calculated" : false //值是否表达式
},
"input" : {
},
"dataRule" : {
"dataType" : 1,
"allowEmpty" : false, //是否允许为空
"minLen" : 1,
"maxLen" : 100
}
},
"数值输入框" : {
"type" : "input",
"show" : true,
"defaultValue" : {
"value" : "",
"calculated" : false
},
"input": {
},
"dataRule":{
"dataType" : 3,
"allowEmpty" : false,
"minValue" : 1, //最小值
"maxValue" : 100, //最大值
"allowMinus" : true, //是否允许输入负数
"decimalCount" : 2 //支持的小数位数
}
},
"日期" : {
"type" : "date",
"show" : true,
"defaultValue" : {
"value" : "",
"calculated" : false
},
"date": {
"formatPatten": "yyyy-MM-dd"
}
},
"下拉框" : {
"type" : "select",
"show" : true,
"defaultValue" : {
"value" : "0", //编码值
"displayValue" : "否", //显示值
"calculated" : false //编码值是否表达式
},
"select": {
"allowInput" : true,
"emptyItemTitle" : "",
"maxItemCount" : 1000,
"dataset" : {
"adapterName" : "数据源名称",
"codeField" : "编码字段",
"nameField" : "名称字段"
}
}
},
"树" : {
"type" : "tree",
"show" : true,
"defaultValue" : {
"value" : "",
"displayValue" : "",
"calculated" : false
},
"dataRule" : {
"dataType" : 1,
"allowEmpty" : false, //是否允许为空
"minLen" : 1,
"maxLen" : 100
},
"tree": {
"dataset": {
"adapterName" : "【必填】数据源名称",
"codeField" : "【必填】编码字段",
"nameField" : "【必填】名称字段",
"parentField" : "父编码字段",
"valueField" : "取值字段",
"leafField" : "叶子字段",
},
"multiSelect": false, //允许选择多个值,缺省:true
"rootNodeValue": "", //根节点父编码值
"selectRange" : {
"rootNode" : false, //根节点是否允许选择
"trunkNode" : false, //枝节点是否允许选择
"leafNode" : true //叶子节点允许选择
},
"selectMode" : 0 , //允许多选时,选择模式,0 - 当前节点(默认),1 - 当前节点及子孙节点,2 - 仅子孙节点,3 - 上下递归
"loadMode" : 0, //获取树数据时,数据加载模式,0 - 一次性加载,1 - 逐层加载
"expandMode" : 0, //树渲染后,节点展开模式,0 - 不展开,1 - 根节点展开,2 - 全部展开
"window" : {
"title" : "标题",
"width" : 640,
"height" : 480
}
}
}
};
dataType : 1:字符型, 2:整型, 3:数值型, 4:日期
1、extendEditorOptions中的控件定义范围可按照需要的类型进行配置;
2、为防止js缓存,可以在引入的js文件后面加一个版本号,如上图中的”?v=1”,js文件内容变化后,调整v的值即可;
3、同一类控件,如果数据规则不同,可以配置多个。例如:假设有两个不同的数值(金额和数量),可以定义两种控件,如:
var extendEditorOptions = {
"金额控件" : {
"type" : "input",
"show" : true,
"defaultValue" : {
"value" : "",
"calculated" : false
},
"input": {
},
"dataRule":{
"dataType" : 3,
"allowEmpty" : false,
"minValue" : 1,
"maxValue" : 100000,
"allowMinus" : false,
"decimalCount" : 2
}
},
"数量控件" : {
"type" : "input",
"show" : true,
"defaultValue" : {
"value" : "",
"calculated" : false
},
"input": {
},
"dataRule":{
"dataType" : 3,
"allowEmpty" : false,
"minValue" : 1,
"maxValue" : 100,
"allowMinus" : false,
"decimalCount" : 0
}
}
}
3.2 设置单元格别名
选中动态控件所在单元格,在单元格属性的“名称”中设置一个有业务含义的值(为此单元格起个名字,方便后续的JS脚本中能找到这个单元格):
3.3 设置扩展控件
选中动态控件所在单元格,在顶部工具栏【控件】-》【高级控件】中点击“扩展控件”:
在扩展控件弹窗中点击“事件配置”:
- 添加一个“初始化后”事件,选择“JS事件”;
- 添加相关的参数(如上图所示,添加一个“valueType”参数,从D5单元格获取值);
- 添加JS脚本
ER.widget.extend(this, { type: 'component', init: function(element, row, col) { //根据valueType,获取控件配置型 var extendEditorOption = extendEditorOptions['金额控件']; if(1 == valueType) { extendEditorOption = extendEditorOptions['数量控件']; } return this.showCellEditor(extendEditorOption,"值",row,"Sheet1") } })
作者:柳杨 创建时间:2025-07-09 13:59
最后编辑:柳杨 更新时间:2025-07-09 15:09
最后编辑:柳杨 更新时间:2025-07-09 15:09
