这个脚本似乎运行得很好。 这个问题更针对它是如何写的(由初学者编写)。
我一直在编写脚本,在将其分解为多个函数后,我很难将变量从第一个函数传递到下一个函数。 阅读后,我发现我不一定需要包含"var = ",尽管我不能 100% 确定区别是什么。 我设法让"变量"(它们仍然被认为是变量吗?)传递给以下函数,但我只是想确保我所做的是高效/可接受的。
function onEdit(e){
/* I switched these from "var = " because they weren't passing
down to the following functions.
*/
activess = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
activeCell = activess.getActiveCell();
valueToFind = activeCell.getValue();
// Column Values
foundItemValues = [];
foundSubItemValues = [];
foundCatValues = [];
foundSubCatValues = [];
// These never change regardless of active sheet
catss = SpreadsheetApp.getActive().getSheetByName('Categories-Concat');
catData = catss.getRange(1,2,catss.getLastRow(),catss.getLastColumn()).getValues();
catIndex = catData[0].indexOf(activeCell.getValue()) + 2;
subCatIndex = catData[0].indexOf(activeCell.getValue()) + 2;
itemss = SpreadsheetApp.getActive().getSheetByName('Items');
itemdata = itemss.getRange(2,1,itemss.getLastRow(),4).getValues();
if(e.range.getSheet().getName() == 'projectSelections'){
activess = e.range.getSheet().getName();
colCss = SpreadsheetApp.getActive().getSheetByName('Categories-Concat');
colCdata = colCss.getRange(1,2,1,colCss.getLastColumn()).getValues();
colCIndex = colCdata[0].indexOf(activeCell.getValue()) + 2;
if(activeCell.getColumn() == 2 && activeCell.getRow() > 1){
this.subCategoryDV(e);
}
}
}
function subCategoryDV(e){
// Populate SUB-CATEGORY data validations
activeCell.offset(0, 1).clearDataValidations();
for (var q = 1; q < catData.length; q++){
for(var i=0;i<catData.length;i++){
if(valueToFind==catData[0][i]){
foundSubCatValues.push(catData[q][i]);
}
}
}
var subCatValidationRange = foundSubCatValues;
var subCatValidationRule = SpreadsheetApp.newDataValidation().requireValueInList(subCatValidationRange).build();
if(activeCell.getValue() != ""){
activeCell.offset(0, 1).setDataValidation(subCatValidationRule);
}
}
关键字var
确保变量保留在本地范围内(粗略地说,只有变量所在的函数才能看到它。请参阅此处:var关键字的目的是什么,何时应该使用它(或省略它)?
一般来说,尝试将事情保持本地是一种很好的做法 - 全局变量有很多问题,快速谷歌搜索为什么全局变量或邪恶(或类似的东西)会告诉你所有关于它的信息。
如果你尝试使用第二个函数,你需要传递引用的每个变量 -activeCell
、catData
、valueToFind
和foundSubCatValues
以及 'e'。
您可以做的另一件事是在函数onEdit
中定义函数subCategoryDV
。