
[英]Google Apps Script - how to applies this code for multiple sheets in google sheets
[英]How to apply Google Apps Script to multiple sheets
我想将以下代码应用于同一个 Google Sheet 中的多个选项卡。 在第一个 var 中定义不同的选项卡,或者在同一个项目中应用多个 .gs 文件,每个文件都具有不同的 var 没有成功。
var naamWerkbladKasboek = "Kasboek";
var naamWerkbladOpties = "Opties";
var eersteKolomMetInput = 2;
var tweedeKolomMetInput = 3;
var derdeKolomMetInput = 4;
var werkblad = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(naamWerkbladKasboek);
var werkbladOpties = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(naamWerkbladOpties);
var Opties = werkbladOpties.getRange(2, 1, werkbladOpties.getLastRow()-1, 3).getValues();
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var row = activeCell.getRow();
var column = activeCell.getColumn();
var werkbladName = activeCell.getSheet().getName();
if(werkbladName === naamWerkbladKasboek && column === eersteKolomMetInput && row > 1){
applyFirstLevelValidation(val, row);
} else if(werkbladName === naamWerkbladKasboek && column === tweedeKolomMetInput && row > 1){
applySecondLevelValidation(val, row);
}
}
function applyFirstLevelValidation(val, row){
if(val === ""){
werkblad.getRange(row, tweedeKolomMetInput).clearContent();
werkblad.getRange(row, tweedeKolomMetInput).clearDataValidations();
werkblad.getRange(row, derdeKolomMetInput).clearContent();
werkblad.getRange(row, derdeKolomMetInput).clearDataValidations();
} else {
werkblad.getRange(row, tweedeKolomMetInput).clearContent();
werkblad.getRange(row, tweedeKolomMetInput).clearDataValidations();
werkblad.getRange(row, derdeKolomMetInput).clearContent();
werkblad.getRange(row, derdeKolomMetInput).clearDataValidations();
var gefilterdeOpties = Opties.filter(function(o){ return o[0] === val });
var listToApply = gefilterdeOpties.map(function(o){ return o[1] });
var cell = werkblad.getRange(row, tweedeKolomMetInput);
applyValidationToCell(listToApply,cell);
}
}
function applySecondLevelValidation(val, row){
if(val === ""){
werkblad.getRange(row, derdeKolomMetInput).clearContent();
werkblad.getRange(row, derdeKolomMetInput).clearDataValidations();
} else {
werkblad.getRange(row, derdeKolomMetInput).clearContent();
var waardeEersteKolomMetInput = werkblad.getRange(row, eersteKolomMetInput).getValue();
var gefilterdeOpties = Opties.filter(function(o){ return o[0] === waardeEersteKolomMetInput && o[1] === val });
var listToApply = gefilterdeOpties.map(function(o){ return o[2] });
var cell = werkblad.getRange(row, derdeKolomMetInput);
applyValidationToCell(listToApply,cell);
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}
我已尝试使用此处所示的唯一和排除标签: 如何在多个工作表、Google 表格上运行脚本,并尝试使用此处所示的数组: https : //webapps.stackexchange.com/questions/115076/ how-to-run-script-on-multiple-google-sheet-tabs但两者都无济于事。 有人可以指出我正确的方向吗?
作为一个例子,我可以展示我如何尝试使用唯一的标签
//**EDIT**
var only = [
"Kasboek1",
"Kasboek2",
"Kasboek3"
];
var naamWerkbladOpties = "Opties";
var eersteKolomMetInput = 2;
var tweedeKolomMetInput = 3;
var derdeKolomMetInput = 4;
var werkblad = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(only);
var werkbladOpties = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(naamWerkbladOpties);
var Opties = werkbladOpties.getRange(2, 1, werkbladOpties.getLastRow()-1, 3).getValues();
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var row = activeCell.getRow();
var column = activeCell.getColumn();
var werkbladName = activeCell.getSheet().getName();
if(werkbladName === only && column === eersteKolomMetInput && row > 1){
applyFirstLevelValidation(val, row);
} else if(werkbladName === only && column === tweedeKolomMetInput && row > 1){
applySecondLevelValidation(val, row);
}
}
function applyFirstLevelValidation(val, row){
if(val === ""){
werkblad.getRange(row, tweedeKolomMetInput).clearContent();
werkblad.getRange(row, tweedeKolomMetInput).clearDataValidations();
werkblad.getRange(row, derdeKolomMetInput).clearContent();
werkblad.getRange(row, derdeKolomMetInput).clearDataValidations();
} else {
werkblad.getRange(row, tweedeKolomMetInput).clearContent();
werkblad.getRange(row, tweedeKolomMetInput).clearDataValidations();
werkblad.getRange(row, derdeKolomMetInput).clearContent();
werkblad.getRange(row, derdeKolomMetInput).clearDataValidations();
var gefilterdeOpties = Opties.filter(function(o){ return o[0] === val });
var listToApply = gefilterdeOpties.map(function(o){ return o[1] });
var cell = werkblad.getRange(row, tweedeKolomMetInput);
applyValidationToCell(listToApply,cell);
}
}
function applySecondLevelValidation(val, row){
if(val === ""){
werkblad.getRange(row, derdeKolomMetInput).clearContent();
werkblad.getRange(row, derdeKolomMetInput).clearDataValidations();
} else {
werkblad.getRange(row, derdeKolomMetInput).clearContent();
var waardeEersteKolomMetInput = werkblad.getRange(row, eersteKolomMetInput).getValue();
var gefilterdeOpties = Opties.filter(function(o){ return o[0] === waardeEersteKolomMetInput && o[1] === val });
var listToApply = gefilterdeOpties.map(function(o){ return o[2] });
var cell = werkblad.getRange(row, derdeKolomMetInput);
applyValidationToCell(listToApply,cell);
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}
在onEdit
您检查当前工作表的名称是否包含“Kasboek”
function onEdit(e){
var activeCell = e.range;
var activeSheet = activeCell.getSheet();
if(activeSheet.getName().includes("Kasboek")){
KasboekModification(activeCell);
} else {
//code here if changes need to be made on other sheets
}
}
之后,您将拥有function KasboekModification(cell){}
函数,您可以在其中发挥当前工作表的魔力。
如果已编辑的工作表不是要编辑的预定义工作表之一,则一个简单的解决方案是从onEdit(e)
返回。
只做:
var only = ["Sheet1Name", "Sheet2Name", "Sheet3Name"]; // add sheet names as desired
function onEdit(e) {
if (!(only.includes(e.range.getSheet().getName())) {
return;
}
// put the rest of your onEdit function here
}
或排除:
var exclude = ["Sheet4Name", "Sheet5Name", "Sheet6Name"]; // add sheet names as desired
function onEdit(e) {
if (exclude.includes(e.range.getSheet().getName())) {
return;
}
// put the rest of your onEdit function here
}
var only = ["Kasboek", "Kasboek2", "Kasboek3"];
function onEdit(e) {
if (!(only.includes(e.range.getSheet().getName())) {
return;
}
var activeCell = e.range;
var val = activeCell.getValue();
var row = activeCell.getRow();
if (row <= 1) return;
var column = activeCell.getColumn();
var eersteKolomMetInput = 2;
var tweedeKolomMetInput = 3;
var derdeKolomMetInput = 4;
if (column === eersteKolomMetInput) {
applyFirstLevelValidation(val, row);
}
else if (column === tweedeKolomMetInput) {
applySecondLevelValidation(val, row);
}
}
function applyFirstLevelValidation(val, row) {
// ...
}
function applySecondLevelValidation(val, row) {
// ...
}
我希望这对你有帮助!
类型错误:无法读取未定义的属性“范围”(第 7 行,文件“multipledatavalidation”)
第 7 行; if (exclude.includes(e.range.getSheet().getName())) { return; }
应该注意的是,我的工作表上还有另一个脚本正在运行。 一种允许我在锁定到位的情况下复制工作表。 我希望能够在我制作的原始工作表的所有副本上运行此代码。 这是我的工作表的共享、可编辑版本的链接。
var optionsWsName = "Backend-Prices";
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);
var exclude = ["BackendImportedData", "donotedit", "BackendDataSort", "09/20_DS7"]; // add sheet names as desired
// function to update each time the file is Edited
function onEdit(e){
if (exclude.includes(e.range.getSheet().getName())) {
return;
}
var Options = wsOptions.getRange(2, 1, wsOptions.getLastRow()-1, 5).getValues();
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
if (r <= 8) return;
var c = activeCell.getColumn();
var FirstLevelColumn = 1;
var SecondLevelColumn = 2;
var ThirdLevelColumn = 3;
var FourthLevelColumn = 4;
if(c === FirstLevelColumn){
applyFirstLevelValidation(val, r);
} else if(c === SecondLevelColumn){
applySecondLevelValidation(val, r);
} else if(c === ThirdLevelColumn){
applyThirdLevelValidation(val, r);
}
}//end onEdit
// function for second level of data validation to work correctly
function applyFirstLevelValidation(val, r){
if(val === ""){
ws.getRange(r, SecondLevelColumn).clearContent();
ws.getRange(r, SecondLevelColumn).clearDataValidations();
ws.getRange(r, ThirdLevelColumn).clearContent();
ws.getRange(r, ThirdLevelColumn).clearDataValidations();
ws.getRange(r, FourthLevelColumn).clearContent();
ws.getRange(r, FourthLevelColumn).clearDataValidations();
} else {
ws.getRange(r, SecondLevelColumn).clearContent();
ws.getRange(r, SecondLevelColumn).clearDataValidations();
ws.getRange(r, ThirdLevelColumn).clearContent();
ws.getRange(r, ThirdLevelColumn).clearDataValidations();
ws.getRange(r, FourthLevelColumn).clearContent();
ws.getRange(r, FourthLevelColumn).clearDataValidations();
var filteredOptions = Options.filter(function(o){ return o[0] === val });
var listToApply = filteredOptions.map(function(o){ return o[1] });
var cell = ws.getRange(r, SecondLevelColumn);
applyValidationToCell(listToApply,cell);
}
}
// function for third level of data validation to work correctly
function applySecondLevelValidation(val, r){
if(val === ""){
ws.getRange(r, ThirdLevelColumn).clearContent();
ws.getRange(r, ThirdLevelColumn).clearDataValidations();
ws.getRange(r, FourthLevelColumn).clearContent();
ws.getRange(r, FourthLevelColumn).clearDataValidations();
} else {
ws.getRange(r, ThirdLevelColumn).clearContent();
ws.getRange(r, ThirdLevelColumn).clearDataValidations();
ws.getRange(r, FourthLevelColumn).clearContent();
ws.getRange(r, FourthLevelColumn).clearDataValidations();
var firstlevelColValue = ws.getRange(r, FirstLevelColumn).getValue();
var filteredOptions = Options.filter(function(o){ return o[0] === firstlevelColValue && o[1] === val });
var listToApply = filteredOptions.map(function(o){ return o[2] });
var cell = ws.getRange(r, ThirdLevelColumn);
applyValidationToCell(listToApply,cell);
}
}
// function for fourth level of data validation to work correctly
function applyThirdLevelValidation(val, r){
if(val === ""){
ws.getRange(r, FourthLevelColumn).clearContent();
ws.getRange(r, FourthLevelColumn).clearDataValidations();
} else {
ws.getRange(r, FourthLevelColumn).clearContent();
var firstlevelColValue = ws.getRange(r, FirstLevelColumn).getValue();
var secondlevelColValue = ws.getRange(r, SecondLevelColumn).getValue();
var filteredOptions = Options.filter(function(o){ return o[0] === firstlevelColValue && o[1] === secondlevelColValue && o[2] === val });
var listToApply = filteredOptions.map(function(o){ return o[3] });
var cell = ws.getRange(r, FourthLevelColumn);
applyValidationToCell(listToApply,cell);
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.