Wilson.Zhang 发表于 2024-9-9 17:21:11

未锁定单元格失焦化

在开启表单保护的Workbook内,锁定单元格和未锁定单元格穿插遍布。允许对未锁定单元格编辑,对于锁定单元格,误触将会引出提示信息弹框,索性不允许选择锁定的单元格,就不会有提示信息弹框出现。虽然避免了对锁定单元格误触引发的提示信息弹框,但也存在隐患。比如,一个未锁定的单元格四周都是已锁定的单元格,对该未锁定的单元格编辑后,由于不允许选择锁定的单元格,任凭光标在锁定的单元格上点击,愣是不会给到任何回应,而导致未锁定单元格的输入态无从更变,如动图1所示。


图1. 未锁定单元格不失焦
怎么办呢?莫要慌,先冷静下。归根结底是要在点击锁定单元格时令正在编辑中的未锁定单元格失焦,失焦呢有现成的资源支持,即Workbook:focus(false)。那么,问题的关键就是什么时候触发失焦呢?在光标触及锁定单元格时,那么又如何判断光标落在锁定单元格上了呢?SpreadJS的CellClick事件可以监听到被点击单元格的行列坐标,而通过行列坐标又能检查单元格是否被锁定。至此,方案落成,如下所述:
1. 注册CellClick事件监听单元格点击动作。
2. 定义监听事件处理函数:通过Worksheet:getCell().locked()检查被点击单元格的锁定状态,如果锁定且工作簿获得焦点,则手动令Workbook失焦,否则纹丝不动。
如动图2所示即上述方案的实际效果。


图2. 未锁定单元格失焦
talk is more chape than code, please look at code:
页: [1]
查看完整版本: 未锁定单元格失焦化