【问题标题】:From a named range, select one column but not the header row从命名范围中,选择一列但不选择标题行
【发布时间】:2021-12-30 10:38:47
【问题描述】:

我可以为一整列使用此功能,但如果我有一个 NamedRange,我将按如下方式调用 food。

Vegetables Fruit Meat
Carrot Apple Pork
Potato Orange Chicken
Turnip Pear Beef

然后我想抓取第一行下方的列,然后将其添加到下拉列表中。

我知道如何填充下拉列表,我可以使用 Map 抓取一整列,但我如何只获取第一行下方的项目。


我已经创建了以下工作脚本,但是当你 Logger.log (oneSet)

我得到了整列,包括标题。相反,我想要没有标题的相关数据列。

function selectCol(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var foodList = ss.getRangeByName("Food").getValues();

var oneSet = foodList.map(oneCol);

function oneCol(one){
      return one[2]
    };
Logger.log(oneSet);

// [0] returns [Vegetables, Carrot, Potato, Turnip]
// [1] returns [Fruits, Apple, Orange, Pear]
// [2] returns [Meats, Pork, Chicken, Beef]

// So what I want is:
// [0] to return [Carrot, Potato, Turnip]
// [1] to return [Apple, Orange, Pear]
// [2] to return [Pork, Chicken, Beef]

}

【问题讨论】:

    标签: javascript google-apps-script google-sheets named-ranges


    【解决方案1】:

    此函数构建所有三个并将它们放在每个列表的正下方。

    function makeADropDown() {
      const ss = SpreadsheetApp.getActive();
      const sh = ss.getSheetByName('Sheet0');
      const vs = sh.getDataRange().getDisplayValues();
      [...Array.from(Array(3).keys())].forEach(idx => {
        let r =SpreadsheetApp.newDataValidation().requireValueInRange(sh.getRange(2,idx + 1,sh.getLastRow()-1,1)).build();
        sh.getRange(sh.getLastRow() + 1,idx + 1).setDataValidation(r);
      })
    }
    

    这一行只是创建和像 [0,1,2] 这样的数组来运行循环 3 次。

    [...Array.from(Array(3).keys())]

    【讨论】:

    • 感谢 Cooper 的帮助。我希望使用命名范围而不是使用行列。我发现我可以移动并添加到一个命名的 Range 并且脚本不会中断。而替代方案需要知道第一行和第一列单元格,如果移动脚本失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    相关资源
    最近更新 更多