You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

传递正确参数仍报错:Protection.setUnprotectedRanges参数不匹配

问题分析与解决
  • 错误核心:Protection.setUnprotectedRanges()要求传入Range对象数组,你现在传的是A1表示法的字符串数组,完全不符合方法的参数要求。

修正后的代码

var thisSheet = ss.getActiveSheet()
var template = thisSheet.getRange("TemplateLineRecurrent")
var forms = template.getFormulas()
Logger.log(forms)
var insertPos = template.getRow()
// 插入新行
thisSheet.insertRowsBefore(insertPos, 1)
// 复制模板公式
const destRange = thisSheet.getRange(insertPos, template.getColumn(), 1, template.getLastColumn() - template.getColumn() + 1)
destRange.setFormulas(forms)
const p = thisSheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
const ranges = p.getUnprotectedRanges();
const newRanges = [...ranges]; // 直接复制原Range对象数组
// 创建新的解除保护范围(保留Range对象)
const newUnprotectedRange = thisSheet.getRange(insertPos, destRange.getColumn(), 1, 5)
Logger.log(newUnprotectedRange.getA1Notation())
newRanges.push(newUnprotectedRange)
Logger.log(newRanges.map(range => range.getA1Notation()))
p.setUnprotectedRanges(newRanges); 

关键说明

  1. 不要把getUnprotectedRanges()返回的Range对象转成字符串,直接复用这些对象即可。
  2. 新增解除保护范围时,直接将getRange()返回的Range实例加入数组,绝不能用getA1Notation()转成字符串。
  3. 日志里的number[]是Google Apps Script的类型提示bug,实际问题就是参数类型不匹配——字符串数组≠Range对象数组。

内容的提问来源于stack exchange,提问作者Meaulnes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:42:42