アプリ スクリプトを使用して Google スプレッドシートでデータ検証ルールを設定する際に問題が発生しました。以下に 2 つの関数を示します。1 つは、ユーザーが何らかの方法でスプレッドシートを変更するたびにトリガーされる onChange 関数です。
updatenamedataVal() 関数は、特定のシートから行を追加/削除するたびにトリガーされます。
すべてが正常に機能し、コードが実行されます。しかし、セルにはデータ検証が設定されていません! どうしたの?
function myonChange(e){
var ss = e.source.getActiveSheet();
var ssname = ss.getSheetName();
if((e.changeType === 'INSERT_COLUMN' || e.changeType === 'REMOVE_COLUMN') && ssname !== 'Aggregates'){
Browser.msgBox('Whoops!','You are not allowed to add/remove columns. Please undo action by pressing CTRL+Z', Browser.Buttons.OK);
}
else if((e.changeType === 'INSERT_ROW' || e.changeType === 'REMOVE_ROW') && ssname === 'Teacher Details'){
var ssrange = ss.getDataRange();
var valrange = ss.getRange(2,3,ssrange.getLastRow(),1);
updatenamecelldataVal(valrange);
}
};
function updatenamecelldataVal(valrange){
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var numsheets = SpreadsheetApp.getActiveSpreadsheet().getNumSheets();
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(valrange).build();
for(var i = 0; i < numsheets; i++){
var sheetname = sheets[i].getName();
var sheetrange = sheets[i].getDataRange();
var sheetlastrow = sheetrange.getLastRow();
if(sheetname !== 'Teacher Details' && sheetname !== 'Aggregates' && sheetname !== 'List of Subjects'){
for(var j = 0; j < (sheetlastrow/17); j++){
var namecell = sheetrange.getCell(4+(17*j), 2);
namecell.clearDataValidations();
namecell.setDataValidation(rule);
}
}
}
};