【问题标题】:Spreadsheet Non-Adjacent Column data电子表格非相邻列数据
【发布时间】:2016-07-14 02:00:43
【问题描述】:

我想要使用应用脚本从电子表格中获取数据。我正在尝试从两个不相邻的列的多行中获取数据,但我无法使用以下语法来做到这一点。说 A1 到 A19 和 C1 到 C19。请告诉我代码是否有问题。 谢谢。

data = sheet.getRange("A1:A19","C1:C19").getValues();

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    最近Class RangeList 已添加到 Google Apps 脚本电子表格服务中,因此现在可以对不相邻的单元格/范围进行一些操作。

    代替

    data = sheet.getRange("A1:A19","C1:C19").getValues()
    

    你可以使用类似的东西

    var data = [];
    var ranges = sheet.getRangeList(["A1:A19","C1:C19"]).getRanges();
    for(var i = 0; i < ranges.length; i++){
      data = Array.concat(data, ranges[i].getValues());
    }
    

    【讨论】:

    • 它是按行追加数据,我们如何才能获得一个列作为提到的范围的数组?
    • @AashitGarodia 请发布一个新问题。
    【解决方案2】:

    您无法通过一次调用将不相邻的两列中的数据获取到单个数组中。但是您可以执行以下操作:

    var range1=sheet.getRange("A1:A19").getValues();
      var range2=sheet.getRange("C1:C19").getValues();
      var range=[],i=-1;
      while ( range1[++i] ) { 
      range.push( [ range1[i][0], range2[i][0] ] );
    }
    

    其中范围将包含来自两列的内容。你使用的getRange()方法是incorrect

    【讨论】:

    • 非常感谢。这工作得很好,上面提到的 .push 功能有什么限制吗?我的意思是我可能需要添加多达 100 列,我尝试使用 2 列如下: var range1=sheet.getRange("A1:A19").getValues(); var range2=sheet.getRange("C1:C19").getValues(); var range3=sheet.getRange("D1:D19").getValues();变量范围=[],i=-1; while ( range1[++i] ) { range.push( [ range1[i][0], range2[i][0], range3[i][0] ] ); }
    • 这是可能的,但不是最有效的方法。您也可以单独使用范围。如果有效,请将答案标记为正确。
    • 我想创建一个谷歌折线图,其中 A 列包含日期,B 列包含数据。我将从谷歌电子表格中获取数据。我希望图表是动态的,这样如果我提到数据行 A1:A100 和 B1:B100,我不希望数据被绘制,除非它在工作表中可用。即,如果数据仅来自 A1:A50 和 B1:B50,则图表不应包含数据点 A51:A100 和 B51:B100。但是,当某些数据写入第 51 行时,数据点应该会自动出现在第 51 行的折线图上。谢谢。
    【解决方案3】:

    大概一旦你提取了你想要的数据,你就会遍历它并用它做不同的事情。

    您使用了.getRange,它返回一个“范围”类型的对象,以及.getValues,它返回该范围对象内的一个二维数组。

    那么为什么不直接获取整个范围,然后只循环遍历您需要的值呢?

    data = sheet.getRange("A1:C19").getValues();
    for (i = 0; i < data[0].length; i++) {
      // do something with data[0][i]
      // do something with data[2][i]
    }
    

    【讨论】:

      【解决方案4】:

      您可以获取所有范围并删除不需要的列。 改编自 Alex Wayne (Deleting a column from a multidimensional array in javascript)

      var table = [
          ['a', 'b', '1', '5', '8'],
          ['c', 'd', '2', '6', '9'],
          ['f', 'g', '3', '7', '10']
      ];
      
      var removeCol = function(arr, col1Index, col2Index) {
          for (var i = 0; i < arr.length; i++) {
              var row = arr[i];
              row.splice(col1Index, 1);
              row.splice(col2Index, 1);
          }
      }
      
      // remove more than one column - can remove as many columns as needed
      // ATENTION: spreadsheet column start in 1 and arrays start in 0
      // start removing from last to first columns
      removeCol(table, 4, 2);
      
      alert(table);
      

      【讨论】:

      • alert 不是有效的 Google Apps 脚本核心函数 - 它只能作为 UI 类的方法使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2017-10-06
      • 1970-01-01
      相关资源
      最近更新 更多