【问题标题】:Google App Script/Javascript - Not able to loop through up to the end of Column in Google Spreadsheet using Google App ScriptGoogle App Script/Javascript - 无法使用 Google App Script 循环到 Google 电子表格中的列末尾
【发布时间】:2021-09-05 15:54:16
【问题描述】:

我正在尝试使用 Google 电子表格抓取 3000 多个数据。我使用 Google App Script 在 A 列中的每个单元格上循环并将其排列在不同的列上。我能够创建一个简单的脚本,该脚本将遍历一个单元格,抓取数据并将其插入指定的列。问题是,我制作的脚本直到专栏结束时才会抓取或循环。即使我在该列上有 3000 多个数据,它也最多只能抓取 1654 个列。数据由个人的多个信息组成。信息由姓名、日期、日期、时间和客户描述组成。 请注意,该列的 1 个单元格中插入了 1 个数据。这意味着我在 A 列中有 3000 多个单元格的数据。

样本数据:

John Doe 2021 年 6 月 21 日星期二,购买了 1 包泡泡糖

Trish Smith 星期一,06/21/2021,买了一包泡泡糖

Karen Peralta 2021 年 6 月 21 日星期四,买了一包泡泡糖

附加问题。使用谷歌应用脚​​本循环遍历每个单元格是否有限制?

function rawDataAlteration() {
  var days = new Array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Raw Data');
  var data = spreadsheet.getRange('A1:A').getValues();
  var filteredData = new Array();
  for (q in data) {
    if(data[q] != "") {
      filteredData.push(data[q]);
    }
  }
  for (x in filteredData) {
    if (filteredData[x] != "") {
      var convertedToArray = filteredData[x][0].split(',');
      var nametoArray = convertedToArray[0].split(' ');
      var name = new Array();
      var day = "";
      var columnNum = Math.floor(x)+1;
      var nameColumn = 'A'+ columnNum;
      var dayColumn = 'B' + columnNum;
      var dateColumn = 'C' + columnNum;
      var shiftColumn = 'D' + columnNum;
      for(let i in nametoArray){
          let found = false;
          for(let j in days){
              if(nametoArray[i] == days[j]){
                  day = days[j];
                  found = true;
              }
          }
          if(!found){
              name.push(nametoArray[i]);
          }
      }
      var columnB = spreadsheet.getRange(nameColumn).setValue(name.toString().replace(',', ' '));
      var columnD = spreadsheet.getRange(dayColumn).setValue(day);
      var columnD = spreadsheet.getRange(dateColumn).setValue(convertedToArray[1]);
      // Logger.log(filteredData);
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

    目前,每个脚本执行只能持续six minutes。如果您的脚本花费的时间超过此时间,它将被中断。

    您的 sn-p 显示您在循环中使用了很多 getRange()setValue(),这会导致处理速度变慢,不建议这样做。

    根据best practices,更好的方法是批量调用。在您的情况下,这意味着在循环中使用数组处理所有数据,然后在循环外执行 setValues()

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多