找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 Grayson.Shang 于 2024-7-30 09:23 编辑

对于使用了活字格一段时间的我,觉得页面上单元的条件格式很好用,可以根据页面上一些值,设置动态的只读和编辑状态,就感觉很好用,不知道大家有没有用起来,是不是觉得很好用呢?
单元格动态编辑.gif803075561.png
但在使用过程中就会纳闷,活字格许多数的数据都需要使用表格来展示和填报,表格的编辑不能灵活地设置成动态编辑可太难受了
难受香菇.jpeg43565978.png
前段时间,我找到了一个贴子,发现之前已经有格友在论坛中有示例,通过调用活字格的JSAPI完成这个功能,然后我惊喜异常,茶不思饭不想,就去钻研这个帖子了。今天也想给大家粘贴出来,但发现找不到了
茶不思饭不想.jpeg689839477.png
不过幸好,我保存了当时的demo,我就和大家分享一下

功能的实现主要依靠的是JS,我先把JS给大家展示出来,具体解释的代码中也有注释
  1. var page = Forguncy.Page;
  2. var listView = page.getListView("表格1");
  3. var activeSheet = listView.getControl().getActiveSheet();
  4. // 获取不可编辑列
  5. var noEdit = 0;
  6. // 获取判定列
  7. var reg = 2;

  8. // 定义编辑触发事件,
  9. activeSheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {

  10.     // 获取表格已有数据行数
  11.     let count = listView.getRowCount();

  12.     // 只对非新增行做是否编辑控制
  13.     if (args.row < count) {
  14.         // 获取表格当前设置行,判定列的值
  15.         // getValue,是按照表格单元格展示的,从0开始,若存在行头,也会被计算
  16.         // reg,从0开始,若存在行头,也会被计算
  17.         let colx = listView.getValue(args.row, reg);

  18.         // 设置当前设置行,第noEidt列,当第colx的值等于0的时候,编辑取消
  19.         // args.col,是按照数据的顺序展示的,从0开始,表头不计入
  20.         // 若有多列不可以编辑,可以将下面的条件代码重复即可
  21.         if (args.col == noEdit && colx == 0) {
  22.             args.cancel = true;
  23.             return;
  24.         }
  25.     }
  26. });
复制代码


1. 表格名称
2. 不可编辑列
3. 判定列


代码已贴,大家直接拷贝使用即可,不过今天主要分享的是,在8.1中如何将这个和组件联合起来使用~_~
为什么将这么一个功能,却要和组件联系到一起呢?其实因为这个JS中需要输入三个参数,在这三个参数一致的情况下,其实并不需要再看JS代码了,那么包装起来才是开发的真理,本来想要开发插件,但想起来自己没有经验,学习成本又高,就想着如何降低一下门槛,突然想到8.1的组件是可以给组件中属性赋值的
原来如此.gif585878600.png
那么今天大课堂正式开始

1. 创建一个组件,定义好组件名,设定三个属性,名称分别为表格名,不可编辑列,判定列,这里建议都使用公式(这里定义的属性名称,后面尽量不要改变,因为被引用的地方不会跟着改变,我被这里坑了好多次)
image.png880238036.png
2. 设置组件的值变更命令,主要的区别就是获取前面三个属性值到JS中,其他的和代码提到的一致,大家应该了解JS中存在获取变量和页面值的命令,我这里使用变老了,方便不污染页面
image.png464273681.png
3. 将前面的代码加入到这里的JS命令中,然后修改前面获取值的部分
  1. var page = Forguncy.Page;
  2. // 获取表格名
  3. var listViewName = Forguncy.CommandHelper.getVariableValue("表格名");
  4. var listView = page.getListView(listViewName);
  5. var activeSheet = listView.getControl().getActiveSheet();
  6. // 获取不可编辑列
  7. var noEdit = Forguncy.CommandHelper.getVariableValue("NoEditCol");
  8. // 获取判定列
  9. var reg = Forguncy.CommandHelper.getVariableValue("regex");
复制代码
到此组件就已经定义完成了,具体的使用就变得很简单了。

1. 将组件拖到页面上,然后给对应的属性赋值,可以是定值,也可以引用动态的值,我这里选择表格名定值,不可编辑列和判定列都是动值
image.png819178771.png
2. 当这三个值为空时,这段JS不会被执行,当这三个值不为空,会执行JS,表格对应的就不可以编辑了
表格条件编辑.gif950602722.png

总结一下优缺点:
优点:使用组件可以定义一个类似接口的插件,完成一个功能的包装,后面使用起来也会很方便,不同页面,不同的表格,拖动一个组件就可以完成了,还可以导入到其他demo中使用
缺点:输入的列序号,不能被限制当超出表格列范围,比如-1,或者大于等于表格列数,前端会报错,但在JS中不能查到表格的列数,所以做不了,限制,想使用trycatch捕获,但是报错的地方catch捕获不到(不知道原因,有大佬知道欢迎交流)


表格条件编辑.fgcc

88.74 KB, 下载次数: 403

评分

参与人数 2满意度 +10 收起 理由
zou + 5
赛龙周 + 5

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部