首页 > 解决方案 > getRange 从一个文件到另一个文件进行新数据验证

问题描述

function test() {
  var  id = PropertiesService.getScriptProperties().getProperty('FILEID')
  var cell = SpreadsheetApp.getActive().getRange('A1');
  var range = SpreadsheetApp.openById(id).getRange('A1:A10');
  var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range, true).build();
  cell.setDataValidation(rule);
}

我需要从一个电子表格文件中获取一个范围以在另一个文件中设置为 Datavalidation,但它给出了一个错误:参数“=sheet!A1:A10”无效。我认为 .getrange 不会从一个文件运行到另一个文件。你能帮我吗?tks。

标签: validationgoogle-apps-scriptgoogle-sheets

解决方案


问题:

a 中指定的范围Data validation 应与您应用的范围在同一个电子表格Data validation中。如果您尝试直接通过表格 UI 添加它,您会注意到这一点(设置范围时,您只能从当前电子表格中选择表格)。

解决方案:

正如评论中所建议的,实现这种行为的最佳方法是:

  • 从源电子表格中的值创建一个数组。
  • 为目标范围设置requireValueInList验证规则。

您可以按照以下方式进行操作:

function dataValDifferentSS() {
  var id = PropertiesService.getScriptProperties().getProperty('FILEID');
  var range = SpreadsheetApp.openById(id).getSheetByName("source").getRange("A1:A"); // Change sheet name and range accordingly
  var list = range.getValues().flat().filter(value => value !== ""); // Get 1D array from source range
  var targetSheet = SpreadsheetApp.getActive().getSheetByName("target"); // Change sheet name accordingly
  var cell = targetSheet.getRange("A1"); // Change A1 range accordingly
  var rule = SpreadsheetApp.newDataValidation().requireValueInList(list, true).build();
  cell.setDataValidation(rule);
}

笔记:

  • 您应该相应地编辑源和目标工作表名称和范围(sourcetargetA1:AA1)。
  • 我假设脚本绑定到目标电子表格。
  • 您应该启用 V8以使该脚本正常工作。

参考:


推荐阅读