应用程序脚本来自另一个工作簿的数据验证



我正在尝试根据单独工作簿中不同工作表的列表验证单元格。我通过将所需的工作表复制到当前工作簿中来构建代码来测试它。我更改了所有的参考资料,以反映我想要的实际来源,一切似乎都很好。当我删除副本时,我遇到了问题,因为即使所有引用都更改为原始源,数据验证似乎仍在使用副本。

var DbSheet = SpreadsheetApp.openByUrl(ingredientDbBookUrl).getSheetByName(ingredientDbBookName);
function nameValidation(){
var cell = sheet.getRange(3,nameColumn,recipe.getLastRow(),1);
var list = DbSheet.getRange(3,2,ingredientDbSheet.getLastRow());
var helpText = 'helptxt';
var rule = SpreadsheetApp.newDataValidation()
.requireValueInRange(list)
.setAllowInvalid(false)
.setHelpText(helpText)
.build();
cell.setDataValidation(rule);

是否可以在单独的工作簿中验证列表中的单元格?我使用有界脚本这一事实重要吗?

我用这个做了:

function validatefromanothersheet() {
const ss=SpreadsheetApp.openById("Another ssid");
const sh=ss.getSheetByName('Sheet1');
const list=sh.getRange(1,1,sh.getLastRow(),1).getValues().flat();
let rule=SpreadsheetApp.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
SpreadsheetApp.getActiveSheet().getRange(1,1,10,1).setDataValidation(rule);
}

是否可以在单独的工作簿中验证列表中的单元格?

我使用有界脚本这一事实重要吗?

为什么验证有错误

这可能是因为一旦你有了";设置";对一个单元格进行验证,生成它的代码是什么并不重要。

这就像从一个平面图中构建一些东西,然后因为你改变了平面图而期望建筑改变。

您需要首先清除规则,然后构建规则,并使用新的源再次应用它

最好不要使用requireValueInRange(range(,因为范围可能会被跨越。但是,如果您正在将其转换为值,正如您的代码所示,那么这应该没有问题。

参考

  • 数据验证生成器

相关内容

  • 没有找到相关文章

最新更新