首页 > 解决方案 > 在脚本结束或取消之前,Google Sheets Script for loop 不再粘贴

问题描述

出于某种原因,我昨天工作的代码今天已经停止工作。我似乎无法确定我做了什么导致这个问题,并且可以用更多的眼光来看待它。这是一个非常简单的过程,但我对这门语言非常陌生,所以我确定我错过了一些东西。

问题是用于更新/粘贴到工作表上的单元格 B2 的 for 循环,但现在它不会这样做,直到我取消代码或它结束(使用 num 的最新值)之后。它导致信息不被更新,所以我得到的只是与单元格 B2 中的任何内容相关的信息,一直粘贴到行尾。它曾经等到 B2 更新后再复制并粘贴到下一行,这需要一段时间,但由于我没有运行大量数据,所以在 5 分钟限制之前我仍然有足够的时间。我唯一的想法是我一定做了一个小的编辑来改变它,但我无法在版本历史中找到它。任何帮助将不胜感激。

 function CopyandPasteNewData2() {

   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sh = ss.getSheetByName('sheet1');
   var lastRow = sh.getLastRow();
   var num = 6;
   
   for(var i = 6; i<=lastRow; i++)
   {
   
   num;
     
   sh.getRange('A'+num).copyTo(sh.getRange('B2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
   sh.getRange('D2:H2').copyTo(sh.getRange('B'+num+':F'+num), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
   
   num++;
     
   }
   
 };

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


当您迭代地修改工作表的值时,最好使用flush()来应用所有待处理的电子表格更改。

请尝试以下小修改:

function CopyandPasteNewData2() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('sheet1');
  var lastRow = sh.getLastRow();
  var num = 6;
  
  for(var i = 6; i<=lastRow; i++)
  {
  
  num;
    
  sh.getRange('A'+num).copyTo(sh.getRange('B2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
  sh.getRange('D2:H2').copyTo(sh.getRange('B'+num+':F'+num), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
  SpreadsheetApp.flush(); // <- new code
  
  num++;
    
  }
  
};

推荐阅读