Winny 发表于 2021-8-19 16:32:32

SpreadJS设置单元格编辑状态

本帖最后由 Ellia.Duan 于 2024-4-19 16:46 编辑

很多用户在日常的开发中,经常会用到单元格保护的需求,本贴讲解如何使用在线表格编辑器及js代码来实现单元格保护。表单保护的机制: SpreadJS表单保护的机制与Excel完全一致,需要同时设置单元格锁定状态(locked)以及表单保护状态(isProtect)同时为true,才能让单元格禁止编辑。

1. 在线表格编辑器中实现表单保护
(1)保护整个工作簿
         在线表格编辑器中没有直接将整个工作簿保护的操作按钮,需要依次设置每个sheet为保护状态,具体操作如下图所示
         
    ps:在进行表单保护时,可以按需选择表单保护后还允许用户做哪些操作,截图如下。
      
   (2)设置部分单元格可编辑
      SpreadJS默认单元格的锁定状态为True,设置部分单元格可以编辑操作如下:   
      step1: 选中目标单元格,右键点击设置单元格格式;
         
      step2:将目标单元格保护(锁定)状态设置为False;
      
      step3: 右键当前sheetTab,选择保护工作表;
      
       设置完成之后,就只有蓝色区域的单元格可以编辑,其它区域的单元格无法编辑。
    (3)设置部分单元格不可编辑
      step1: 选中整张工作表,右键点击设置单元格格式;
      
   step2: 取消单元格保护(锁定)状态;
   
    step3: 选中不允许编辑的单元格,右键设置单元格格式,将对应的锁定状态勾选;
   
    step4: 右键当前sheet页底部tab,点击保护工作表。
   
    设置完成后,就只有蓝色单元格无法编辑,其余单元格均可正常编辑。
2. js代码实现表单保护
   (1) 设置整个工作簿不可编辑   
let sheetCount = spread.getSheetCount()
for(let i=0; i<sheetCount; i++){
    spread.getSheet(i).options.isProtected = true
}
   (2) 设置部分单元格可以编辑//设置A1~B5可以编辑,其余单元格不可以编辑

let range = sheet.getRange(0,0,5,2)
range.locked(false)
sheet.options.isProtected = true
   部分用户可能会有设置整行或整列可以编辑,其余不可编辑的需求,那如何获取整行或整列呢?
//获取8~10行   -1在此代表所有列
let range = sheet.getRange(7,-1,3,-1)

//获取G~H列(-1在此代表所有行)

let range = sheet.getRange(-1,6,-1,2)

    (3)设置部分单元格不能编辑
let sheet = spread.getActiveSheet()
let defaultStyle = sheet.getDefaultStyle()
defaultStyle.locked = false
sheet.setDefaultStyle(defaultStyle)
let range = sheet.getRange(0,0,5,5)
range.backColor('#9cf')
range.locked(true)
sheet.options.isProtected = true    关于如何设置表单保护到此就结束了,但细心的小伙伴可能会留意到,在在线表格编辑器中设置表单保护后,还有勾选表单保护模式下允许用户做什么操作的选型,那用js如何实现这些选项呢?具体代码见下图:
//表单保护下允许用户调整行高列宽
let sheet = spread.getActiveSheet()
sheet.options.protectionOptions.allowResizeRows = true
sheet.options.protectionOptions.allowResizeColumns = true表单设置保护后具体还可以设置那些属性可以参考:https://demo.grapecity.com.cn/sp ... rksheet/protection#






MarlonYJG 发表于 2024-4-18 21:30:37

设置整个工作簿不可编辑   中函数应该写错了“”let sheetCount = spread.getActiveSheet()“”

workbook.getSheetCount();

Ellia.Duan 发表于 2024-4-19 16:45:48

本帖最后由 Ellia.Duan 于 2024-4-19 16:47 编辑

MarlonYJG 发表于 2024-4-18 21:30
设置整个工作簿不可编辑   中函数应该写错了“”let sheetCount = spread.getActiveSheet()“”

workbo ...
感谢指正,我已在原贴中修改。稍后有金币奖励。

MarlonYJG 发表于 2024-4-20 22:54:35

Ellia.Duan 发表于 2024-4-19 16:45
感谢指正,我已在原贴中修改。稍后有金币奖励。

金币能兑换成人民币或者$吗? 我这个人比较现实。

Ellia.Duan 发表于 2024-4-22 10:57:24

本帖最后由 Ellia.Duan 于 2024-4-22 11:17 编辑

MarlonYJG 发表于 2024-4-20 22:54
金币能兑换成人民币或者$吗? 我这个人比较现实。
请参考《金币兑换大换新》公告,攒够金币,可以兑换小礼品和京东购物卡。

MarlonYJG 发表于 2024-4-24 16:03:43

Ellia.Duan 发表于 2024-4-22 10:57
请参考《金币兑换大换新》公告,攒够金币,可以兑换小礼品和京东购物卡。

实实在在的money 可以兑换吗:)

Ellia.Duan 发表于 2024-4-25 11:09:45

您好,我们有一套金币兑换规则,请参考楼上的回复。
页: [1]
查看完整版本: SpreadJS设置单元格编辑状态