【问题标题】:Fastest way to populate an arrays from spreadsheet columns从电子表格列填充数组的最快方法
【发布时间】:2016-06-15 15:58:28
【问题描述】:

假设我有一个 Google 表格,其列中的数据长度不同,但相邻的垂直单元格之间没有空格。我试图只调用我的电子表格的 getValues() 方法,比如第一列,尽管我想对所有列都这样做。以下代码在我的编辑器中运行很慢:

function myFunction() {
  var InfoSheetIterator = DriveApp.getFilesByName("InfoSheets");
  var InfoSheetFile = InfoSheetIterator.next();
  var InfoSheet = SpreadsheetApp.open(InfoSheetFile);

  var DataRange = InfoSheet.getDataRange().getValues();
  var ChannelList = DataRange;
  var ChannelListArray = new Array();
  var i = 0;
  while (DataRange[i][0] != "" || DataRange[i][0] != undefined || DataRange[i][0] != null) {
    ChannelListArray.push(DataRange[i][0]);
  }
  Logger.Log(ChannelListArray.toString());
}

有更快的方法吗?我已被警告不要在尝试优化时使用过多的 getValues() 调用。在这种情况下,由 getValues() 返回的名为 DataRange 的数组使得 DataRange[0] 返回第一行中的所有值,但我想要第一列中的所有值。也许我可以只反转列和行,但我认为这会使原始工作表更大。

【问题讨论】:

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


    【解决方案1】:

    当你做DataRange[0]时,你得到的是一个有一行的矩阵,一个数组数组:

    DataRange[0] //=> [[value_row1], [value_row2], [value_row3], ...] 
    

    我猜你想要的是获得第一列的扁平值数组:

    [value_row1, value_row2, value_row3, ...] 
    

    为此,我使用了一个名为flatten 的实用函数。它将矩阵转换为一维数组。这里是:

    function flatten(matrix){
      return [].concat.apply([], matrix);
    }
    

    然后你这样做:

    flatten(DataRange[0]) 
    

    它将输出展平的列值:[val_row1, val_row2, val_row3, ...]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      相关资源
      最近更新 更多