本帖最后由 Fiooona 于 2019-7-15 15:06 编辑
很多用户对如何设置SpreadJS单元格是编辑是否可编辑比较困惑,并在实际项目中出现设置单元格锁定时样式丢失等问题。在SpreadJS学习指南上表单保护章节有对接口的详细说明,还有与之相关的实际样式、默认样式的说明,但是仍然有用户对表单保护机制并不是很理解。下面我们就详细说明下spreadJS的表单保护机制,如何控制单元格是否可被编辑。 SpreadJS 虽然是一款控件但是他并不是像其他控件一样只要设置disabled 等属性就可以禁止编辑。和Excel一样需要同时设定锁定(locked)和保护(Protect)两个状态为true,才能让单元格禁止编辑。 具体我们分三种情况详细说明一下。 1. 所有单元格都不能编辑 这种情况比较简单只要设置sheet.options.isProtected = true;就可以实现效果,因为sheet表单默认是被锁定的,我们只需要设置保护即可。 2. Sheet表单中大部分单元格不可编辑只有少数行、列或单元格可编辑。 这种情况就和网站示例中所展示的效果一致,绿色单元格格是可以编辑的。其余不可以编辑。 如果我们不希望单元格被编辑,只要给单元格设置一个locked 为true的style即可,如果整行都不希望被编辑,使用setStyle方法时第二个参数设置为-1,那么这一行都被locked了。 3. Sheet中大部分单元格可以编辑少数不能编辑。 和上面第二种情况相反,我们可能只希望少数几个单元格是不能编辑的,比如希望第一行作为列头是不能编辑的。这时只要设置sheet默认loecked为false,然后将第一行锁定即可。 - <font size="4">var defaultStyle = new GC.Spread.Sheets.Style();
- defaultStyle.locked = false;
- activeSheet.setDefaultStyle(defaultStyle, GcSpread.Sheets.SheetArea.viewport);
- var style = new GcSpread.Sheets.Style();
- style.locked = true;
- style.backColor = "red";
- activeSheet.setStyle(0, -1, style);</font>
复制代码 这种设置方法,常常会导致有样式的单元格设置了锁定后,原来的样式丢失,那是因为设置.locked属性时,是在一个新建的样式上( new GC.Spread.Sheets.Style();)设置的,这时可以先获取一处的实际样式: var style = sheet.getActualStyle(0,0); 然后再次基础上设置锁定属性: style.locked = false; 这样可以避免原有样式丢失的问题。
|