如何遍历所有工作表以获取单元格值以创建下拉框?

我有一个包含多个包含相同列标题的工作表的 Google 表格电子表格。我正在尝试从所有工作表中提取“A2:A”范围内的数据,并创建一个包含所有单元格值的下拉框,但目前它只给我一个包含最后一张工作表中单元格值的下拉框。


function getCategoryList() {

   var spreadsheet = SpreadsheetApp.getActive();

   var lastrow = spreadsheet.getActiveSheet().getLastRow()

  

  

   var dynamicList = spreadsheet.getRange('A2:A' + lastrow); 

   var arrayValues = dynamicList.getValues();


   var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(arrayValues);


   console.log(arrayValues)


   spreadsheet.getRange('Main!C4').setDataValidation(rangeRule);


  

}



function doForAllTabs() {

  var spreadsheet = SpreadsheetApp.getActive();

     var lastrow = spreadsheet.getActiveSheet().getLastRow()

  var allSheets = spreadsheet.getSheets();

 

  

  allSheets.forEach(function(sheet) {

    if(sheet.getSheetName() !== "Main") {

      sheet.activate();

      

      getCategoryList()

      

    }    

  })

}


SMILET
浏览 87回答 1
1回答

潇湘沐

使用当前代码,在工作表循环内处理单个工作表后,数据验证将写入单元格 Main!C4。换句话说,数据验证被一次又一次地覆盖。需要的是合并数组中的值,然后将其写入 Main!C4。看看这是否有帮助。function setDataValidation() {var ss = SpreadsheetApp.getActive();var values = allColsA(ss, 'Main', 'A2:A');ss.getRange('Main!C4').setDataValidation(SpreadsheetApp.newDataValidation().requireValueInList(values));}编辑以包含一个带有排除表的数组...function allColsA(spreadsheet, targetSheetName, range) {var arr, excluded; arr = [[]];excluded = [targetSheetName, 'Sheet2', 'Sheet3'];spreadsheet.getSheets().filter(sh => excluded.indexOf(sh.getName()) === -1)    .forEach((s, i) => {        arr = arr.concat(s.getRange(range)                .getValues())    })return  arr.filter(String).reduce((a, b) => a.concat(b), []);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript