javascript - 在脚本结束或取消之前,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++;
}
};
解决方案
当您迭代地修改工作表的值时,最好使用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++;
}
};
推荐阅读
- mysql - SQl问题:从下面的文本中选择第7个之后和第8个下划线之前的文本
- java - 验证请求正文不等于模式
- c# - 该属性无法配置为导航属性 - 实体框架
- amazon-web-services - CloudWatch 日志组、流和批处理之间的区别
- java - @Transaction readOnly 在 Spring repo 上并保存在另一个 repo
- swift - 如何从多个 API url 下载图像但跳过无法访问的
- python - 如何查找网络 ID
- tsql - 我有一个要求,我需要在 Azure SQL DW 中将列值动态转换为列标题
- python - 遵循 python googl-style-guide 时避免使用静态成员和方法
- python-3.x - 在 CPLEX 上实施软规则