如何通过Google Apps Script为数据验证设置命名范围引用
使用场景
示例:我有一个名为Apples的命名范围(地址为"Sheet10!B2:B"),被大量工作表单元格用作数据验证数据源。Apples对应的数据范围可通过脚本修改,例如调整为"Sheet10!D2:D"。
UI操作可实现预期效果
手动将命名范围设置为数据验证的数据源时,单元格的数据验证会始终引用命名范围Apples,自动同步更新后的数据范围。
如何通过Google Apps Script实现同等效果?
GAS功能限制
如果已有namedRange对象,常规设置数据验证的代码写法如下:
mySheet.getRange('F5') .setDataValidation( SpreadsheetApp.newDataValidation() .requireValueInRange( namedRange.getRange() ) .setAllowInvalid(false) .build() );
DataValidationBuilder.requireValueInRange()无法满足需求,该方法仅接收Range类类型参数,不支持传入NamedRange对象,设置后不会保留对命名范围的引用。
是否存在可行的替代方案?
更新1 - Spreadsheet.getRangeByName()方法无效
通过名称获取范围的方式无法解决问题,数据验证会直接写入实际的范围地址而非引用命名范围,相关代码如下:SpreadsheetApp.getActive().getRangeByName("Apples")
更新2 - 目前GAS原生无实现方案
据用户@TheMaster反馈,当前GAS暂不支持该功能。
欢迎为以下功能需求帖点赞+1,推动官方原生支持该能力:
- Google问题追踪器需求帖 编号143913035
- Google问题追踪器需求帖 编号203557342
补充说明:目前唯一可行的解决方案为调用Google Sheets API实现。
内容的提问来源于stack exchange,提问作者Kirby
相关产品推荐
相关产品推荐

