簡體   English   中英

Google App Script/Javascript - 無法使用 Google App Script 循環到 Google 電子表格中的列末尾

[英]Google App Script/Javascript - Not able to loop through up to the end of Column in Google Spreadsheet using Google App Script

我正在嘗試使用 Google 電子表格抓取 3000 多個數據。 我使用 Google App Script 在 A 列中的每個單元格上循環並將其排列在不同的列上。 我能夠創建一個簡單的腳本,該腳本將循環遍歷一個單元格、抓取數據並將其插入到指定的列中。 問題是,我制作的腳本直到列末尾都不會抓取或循環。 即使我在該列上有 3000 多個數據,它也最多只能抓取該列的 1654 個。 數據由個人的多個信息組成。信息由客戶的姓名、日期、日期、時間和描述組成。 請注意,將 1 個數據插入到列中的 1 個單元格中。 這意味着我在 A 列中有 3000 多個帶有數據的單元格。

樣本數據:

John Doe 星期二,06/21/2021,買了 1 包泡泡糖

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

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

附加問題。 使用谷歌應用程序腳本循環遍歷每個單元格是否有限制?

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);
    }
  }
}

目前,每個腳本執行只能持續6 分鍾 如果您的腳本需要更長的時間,它將被中斷。

您的代碼段顯示您在循環內使用了相當多的getRange()setValue() ,這會使處理速度變慢,不推薦使用。

根據最佳實踐,更好的方法是批量調用。 在您的情況下,這意味着在循環中使用數組處理所有數據,然后在循環外執行setValues()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM