因此,我使用此脚本(归功于 Chicago Computer Classes)来根据用户在不同单元格中输入的内容填充 Google 表格单元格的动态数据验证。
例如,如果他们在一个单元格中输入运动“足球”,则下一个单元格具有“CFB、CFL 或 NFL”的数据验证,但如果他们在第一个单元格中输入“篮球”,则第二个单元格的数据验证将更改为“例如 ABL、CBB、NBA 或 WNBA”。
该脚本运行良好,欢迎您在此处使用该表
但是......这是我的问题:
我有一个包含 9000 行数据的现有电子表格。我想将此新数据验证方案应用于此电子表格。该脚本由onEdit()功能触发,当您一次输入一行时效果很好。但是,如果我尝试在第一列中复制并粘贴一大堆行,则只有第二列的第一行会触发 onEdit 并获得新的数据验证,而第二列的所有其他行都没有改变。我还尝试在第一列上“向下填充”或“填充范围”,它们具有相同的结果,其中所选范围中的第一行获得新数据验证,但其余选择保持不变。
虽然如果我手动输入行会很好,但我真的不想这样做 9000 次 :)
如何修改脚本以使用复制/粘贴或填写的数据触发函数?
谢谢!
脚本在这里:
function onEdit(){
var tabLists = "Leagues";
var tabValidation = "2018";
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
var activeCell = ss.getActiveCell();
if(activeCell.getColumn() == 6 && activeCell.getRow() > 1 && ss.getSheetName() == tabValidation){
activeCell.offset(0, 1).clearContent().clearDataValidations();
var makes = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();
var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;
if(makeIndex != 0){
var validationRange = datass.getRange(3, makeIndex, datass.getLastRow());
var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
activeCell.offset(0, 1).setDataValidation(validationRule);
}
}
}