【问题标题】:How to I extract a column from a 2D array in Google Script如何从 Google Script 中的二维数组中提取一列
【发布时间】:2020-05-28 15:08:12
【问题描述】:

我是 GAS 的新手。我已经构建了一个 3D 数组,我想将第 n 列提取为向量。 在本例中,二维数组称为“skillsarray”:

var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RV Partners");
var wsInfosPartners = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Infos Partners");
var skillsarray = wsInfosPartners.getRange(1, 1, 1, wsInfosPartners.getLastColumn()).getValues();

然后,当在我的工作表的单元格中输入一个值时,我想检查这个值是否是我在数组中的第一行的一部分。如果是,我想将相应的列存储在一个新的向量中:

function onEdit (event) {
  var celluleactive = event.range;
  var valeur = celluleactive.getValue();
  var ligne = celluleactive.getRow();
  var colonne = celluleactive.getColumn();
  var nomws = celluleactive.getSheet().getName();

  var n = skillsvector.indexOf(valeur);

所以在“n”中,我的数组中的行号应该与我在“事件”中手动输入的值相对应。将新数组定义为我的初始数组的第 n 列的语法是什么?

如果我不清楚,请告诉我, 谢谢!

【问题讨论】:

    标签: arrays google-apps-script extract


    【解决方案1】:
    1. 检查该值是否属于我的第一行

    您需要将skillsvector 定义为:

    var skillsvector = skillsarray[0];
    

    访问数组的第一行

    1. 将新数组定义为我的初始数组的第 n 列
    • n 返回列在行数组中的位置
    • 要创建一个仅包含列 n 的单元格值的新数组,您必须使用语法 [row[column]] 将二维值范围数组缩减为垂直的一维数组
    • 其中一种方法是mapping

    示例:

      var newArray = values.map(function(column){ 
        return column[n];
    });
    
    • 另一种可能性是使用循环

    示例:

    var newArray = [] ;
    for (var i = 0; i < values.length; i++) {
        newArray.push(values[i][n]);
    }
    
    

    【讨论】:

      【解决方案2】:

      非常感谢 ziganotschka 的帮助!如果有人碰巧遇到同样的困难,让我发布我的完整代码:

      var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
      var wsInfos = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
      var skillsarray = wsInfosPartners.getRange(1, 1, wsInfos.getLastRow(), wsInfos.getLastColumn()).getValues();
      var skillsvector = skillsarray[0];
      var nbofskills = skillsvector.length;
      
      
      
      function onEdit (e) {
        var ActiveCell = e.range;
        var val = ActiveCell.getValue();
        var row = ActiveCell.getRow();
        var col = ActiveCell.getColumn();
        var wsname = ActiveCell.getSheet().getName();
        var n = skillsvector.indexOf(val);
        var skillslist = skillsarray.map(function(column){
          return column[n];
        });
      
        if (wsname == "Sheet1" && col === 2 && row > 1) 
        {
        var listcell = ws.getRange(row, 3); 
        ShowSkillsList(skillslist,listcell);   
         } 
      
      }
      
      function ShowSkillsList(skillslist, cell){
      
      
        var rule = SpreadsheetApp
        .newDataValidation()
        .requireValueInList(skillslist)
        .setAllowInvalid(true)
        .build();
      
      cell.setDataValidation(rule);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2018-01-07
        • 1970-01-01
        • 1970-01-01
        • 2020-12-13
        • 1970-01-01
        • 2023-03-16
        • 2018-12-22
        • 2010-11-09
        • 2020-07-20
        相关资源
        最近更新 更多