【发布时间】:2018-12-29 11:04:49
【问题描述】:
我有 4 张纸。表格、原始、URL 和美国/日本/加拿大。我从 URL 表中获取电子表格 url 值,并在 Raw 表中使用“IMPORTRANGE”来传输数据表。从那里,我遍历原始表中的表以检查值是否与表单表中的值匹配。如果匹配,我将在美国/日本/加拿大表中转移该行。
所以我在我的谷歌表格中得到了这个代码:
var mainWS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form');
var continentWS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('USA/Japan/Canada');
var rawWS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Raw');
var urlWS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('URLs');
var tourName = mainWS.getRange('C4').getValue();
var depDate = new Date(mainWS.getRange('C5').getValue());
var status = mainWS.getRange('C6').getValue();
//extract table data
var url = urlWS.getRange("B4").getValue();
rawWS.getRange('A1').setValue('=IMPORTRANGE("' + url + '","Main Data!A1:AE")');
var dummyHolder = rawWS.getRange("B1:B").getValues();
var lastRow = dummyHolder.filter(String).length;
Logger.log(lastRow);
//loop through the raw extract
for(var i = 2; i <= lastRow; i++){
var dateHolder = new Date(rawWS.getRange("E" + i).getValue());
if(rawWS.getRange("F" + i).getValue() == tourName && rawWS.getRange("I" + i).getValue() == status && dateHolder.getTime() === depDate.getTime()){
var continentLR = continentWS.getLastRow() + 1;
rawWS.getRange('Raw!' + i + ':' + i + '').copyTo(continentWS.getRange(continentLR, 1), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}
}
然后,一旦进入循环,我就会突然收到“目标范围的坐标超出工作表的尺寸”错误消息。特别是在for循环之后的第一行:
var dateHolder = new Date(rawWS.getRange("E" + i).getValue());
需要明确的是,它循环的 rawWS 有 134 条记录,并将 134 注册为其最后一行。我不知道为什么我在这里遇到错误。
当我删除该行时,它仍然在下一行给我一个错误。 for 循环中的所有错误。
有什么想法吗?
【问题讨论】:
-
试过了,我得到了 E2 直到 E134。
-
你真的需要阅读this你可能想重写整个事情。
-
我使用了 Logger.log 并得到了值。因为是约会,所以我得到了“Sun Apr 07 12:00:00 GMT-04:00 2019”。我试图注释掉循环内的整个 IF 块,突然 var dateHolder 代码行运行没有任何错误。但是一旦我包含 IF 块,错误就会继续。
-
这很奇怪,我使用了 3 个类似的函数。我只是替换了每个函数的范围,除了这个之外它们工作得很好
-
出错时
i的值是多少?目标工作表有多少行?
标签: javascript for-loop google-apps-script google-sheets