表单保护的主要作用是禁止对Worksheet的任意操作,正如没有买卖就没有杀害,没有修改便没有可能的数据损害。限定观众就只能看,不能动。就好像我们看电影看到了崩裂的剧情,可以骂,但是无法改变剧情,也不影响影片继续传播。表单保护的作用也诚然类似于此,支持不同程度的保护,即在禁用部分操作的同时启用另一部分操作。在开启表单保护时,同时允许用户设置行格式和列格式,如图1所示,设置生效后在列头的右键菜单中可见选项“隐藏”和“取消隐藏”,即上述两个菜单选项可用,如图2所示。
图1. 表单保护允许“设置行格式”和“设置列格式”
图2. 列头右键菜单“隐藏”和“取消隐藏”
“设置行格式”和“设置列格式”对应的表单保护属性名称分别为formatRows和formatColumns,那么也可以通过代码设置属性值为true或false以支持相关操作。然而,在线表格编辑器确实支持上述设置方式,但是SpreadJS表格控件无法识别formatRows和formatColumns这两个表单保护属性,也就是说无法通过开启表单保护属性的方式支持这两种操作,如图3所示,那怎么办呢?注意到这两个保护属性与右键菜单选项一一对应,分别为“隐藏”和“显示”,如图3所示,那么便可以通过控制菜单选项可用或不可用实现表单保护属性设置,得知这些后一条妙计便计上心来。即,正常开启表单保护,在列头通过鼠标右键打开右键菜单时,遍历其中的菜单选项,对“隐藏”和“显示”这两个选项设置可用,即disable = false。之后,便可看到右键菜单中此两项可用,如图4所示,点击后可正常响应以隐藏被选中列或复现被隐藏的列。
图3. 列头右键菜单选项“隐藏/显示”不可用
图4. 列头右键菜单选项“隐藏/显示”可用
需求背景被限制在开启表单保护后允许列头右键菜单中“隐藏”和“显示”可用,虽然通过设置表单保护属性无法支持相关操作,但注意到相关表单保护属性与右键菜单选项有关联,那么便可以通过控制右键菜单选项是否可用来曲线救国。附件demo即上述方案的代码实现,可参考了解详情。
|