为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2022-12-22 09:39:07
我有一个包含多个包含相同列标题的工作表的 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()          }      })}
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

使用当前代码,在工作表循环内处理单个工作表后,数据验证将写入单元格 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), []);

}


查看完整回答
反对 回复 2022-12-22
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信