10金币
本帖最后由 azure1987 于 2025-4-2 12:03 编辑
你好
我有这里有个需求 锁定三个sheet内的行不给编辑
sheet1是正常被锁定的
其余两个sheet无法被正常锁定
比如 sheet1锁定前三行 shee2锁定前2行 sheet3锁定前一行
其中 sheet能被正常锁定 其余两个不能
冻结行是能正确锁定行 但是保护单元格却不可以
代码如下
/**
* 设置 保护区域 信息
*/
setSpreadLocked(sheetLocks) {
// 循环全部 sheet
for (let i = 0; i < this.spread.getSheetCount(); i++) {
let sheet = this.spread.getSheet(i)
let sheetName = sheet.name();
// 获得每个sheet锁定的行数
let rowLock = getLockRow(sheetName, sheetLocks)
console.log(sheetName, 'rowLock ', rowLock)
// 下面是通用的
// sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {
// if (args.row < rowLock - 1) {
// args.cancel = true;
// }
// console.log("禁止修改");
// });
// 1.先开启全部行可以编辑
let defaultStyle = new GC.Spread.Sheets.Style();
defaultStyle.locked = false;
sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);
// 2.再保护指定行
let range = sheet.getRange(0, -1, Number(rowLock - 1), -1, GC.Spread.Sheets.SheetArea.viewport)
// sheet.getRange(range).locked(true);
console.log(sheetName, 'setSpreadLocked', range)
range.backColor('#9cf')
range.locked(true)
// 冻结行
sheet.frozenRowCount(rowLock);
// 启用表单保护
sheet.options.isProtected = true;
}
},
因为项目保密原因 无法提供整体源代码
插件版本如下
|
最佳答案
查看完整内容
您好,一般来说可以用:
sheet.getRange(0, 0, sheet.getRowCount(), sheet.getColumnCount()).locked(false);
sheet.getRange(0, 0, 4, sheet.getColumnCount()).locked(true);
来实现,这样可以避免样式优先级的问题。
如果您的行是后续添加上去的,可以考虑使用修改默认样式的方式去实现,或者在添加行后调用相关接口调整locked属性。
|