我正在尝试根据单独工作簿中不同工作表的列表验证单元格。我通过将所需的工作表复制到当前工作簿中来构建代码来测试它。我更改了所有的参考资料,以反映我想要的实际来源,一切似乎都很好。当我删除副本时,我遇到了问题,因为即使所有引用都更改为原始源,数据验证似乎仍在使用副本。
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(,因为范围可能会被跨越。但是,如果您正在将其转换为值,正如您的代码所示,那么这应该没有问题。
参考
- 数据验证生成器