//CREATE PRIMARY DROPDOWN LIST
function createPrimaryDrpdwon() {
/* SET FOLLOWING VARIABLES */
var dataSS = "Lookup"; //Name of the sheet that contain data for dropdown lists
var dropSS = "Jun 15"; //Name of the sheet which dropdown list to be created
var primaryDataRange = "A4:A14"; //Data range for primary dropdown
var primaryDropRange = "H3:H200"; //Range which primary dropdown set
var primaryDropList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dataSS).getRange(primaryDataRange).getValues();
var primaryDropRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dropSS).getRange(primaryDropRange);
var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(primaryDropList).build();
primaryDropRange.setDataValidation(validationRule);
}
//CREATE SECONDARY DROPDOWN LIST
function onEdit(){
/* SET FOLLOWING VARIABLES */
var dataSS = "Lookup"; //Name of the sheet that contain data for dropdown lists
var dropSS = "Jun 15"; //Name of the sheet which dropdown list to be created
var allDataRange = "B5:C183"; //Data range for dropdown list (both primary and dependent)
var primaryDDCol = 8; //Column number of the primary drop down
var dropSS_ = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dropSS);
var dropDData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dataSS).getRange(allDataRange).getValues();
var activeCell = dropSS_.getActiveCell();
var activeColumn = activeCell.getColumn();
var activeRow = activeCell.getRow();
if(activeColumn==primaryDDCol){
var dep_Col = primaryDDCol+1;
var dep_Row = activeRow;
var depCell = dropSS_.getRange(dep_Row, dep_Col);
var primarySelected = activeCell.getValue();
var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(getDependentList(dropDData,primarySelected)).build();
depCell.setDataValidation(validationRule);
}
}
function getDependentList(dropDData,primarySelected){
var dependenList = [];
var j = 0;
if(dropDData != null){
for(i=0; i<dropDData.length; i++){
if(dropDData[i][0]==primarySelected){
dependenList[j] = dropDData[i][1];
j++;
}
}
}
return dependenList;
}
我正试图编写一个脚本,允许在工作簿中的多个工作表上使用依赖性下拉菜单。我已经创建了一个脚本在一个工作表上工作,它工作得很好,但我必须为每个工作表改变工作表的名称,例如,如果每个标签页是本月的一个星期 "5-4-20","5-11-20","5-18-20 "等,但相同的信息是在该星期标签页上收集的,我如何运行一个脚本,使相同的依赖性下拉列表在每个标签页上以相同的方式工作?
var dropSS
第一种可能:在除以下以外的所有表上运行脚本 Lookup
SpreadsheetApp.getActiveSpreadsheet().getSheets();
允许您检索所有可用的工作表,并在所有工作表上运行脚本。
示例。
function iterateThroughAllSheets(){
var dataSS = "Lookup";
var primaryDataRange = "A4:A14";
var primaryDropRange = "H3:H200";
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i = 0; i < sheets.length; i++){
var dropSS = sheets[i].getName();
if (dropSS != dataSS){
// continue the rest of your code as before
var primaryDropList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dataSS).getRange(primaryDataRange).getValues();
var primaryDropRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dropSS).getRange(primaryDropRange);
var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(primaryDropList).build();
primaryDropRange.setDataValidation(validationRule);
}
}
}
第二种可能:只在最新的工作表上运行脚本。
假设您的工作表总是被追加到右边,最新的工作表将有最高的索引--对应于 sheets.length
.
样本。
function runOntheLastSheet(){
var dataSS = "Lookup";
var primaryDataRange = "A4:A14";
var primaryDropRange = "H3:H200";
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheetNumber = sheets.length;
var dropSS = sheets[sheetNumber-1].getName();
// continue the rest of your code as before
var primaryDropList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dataSS).getRange(primaryDataRange).getValues();
var primaryDropRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dropSS).getRange(primaryDropRange);
var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(primaryDropList).build();
primaryDropRange.setDataValidation(validationRule);
}
第三种可能: 脚本运行在... 活页
定义 var dropSS = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName()
并在您选择的工作表处于活动状态时运行脚本。
对于这三种可能性,请修改
function onEdit()
据此。