getRange从一个文件到另一个文件以进行newdatavalidation


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);
}

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

问题:

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才能使该脚本工作

参考:

  • DataValidationBuilder.requireValueInList(values,showDropdown(

相关内容

  • 没有找到相关文章

最新更新