我有4张纸。表格,原始,URL和美国/日本/加拿大。我从URL表中获取电子表格的url值,并在Raw表中使用“ IMPORTRANGE”来传输数据表。从那里,我遍历Raw表中的表以检查值是否与Form表中的值匹配。如果匹配,我将在美国/日本/加拿大表中转移该行。
所以我在Google表格中得到了这段代码:
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循环内的所有错误。
有什么想法吗?
答案 0 :(得分:1)
我还没有测试过,但是尝试一下:
我认为filter的问题在于它也会在结束之前删除空格,但是getValues()不会。因此,根据数据集,您可能会得到错误的长度。
function unknown() {
var formWS = 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 = formWS.getRange('C4').getValue();
var depDate = new Date(formWS.getRange('C5').getValue());
var status = formWS.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(1,2,rawWS.getLastRow(),1).getValues();
for(var i=dummyHolder.length-1;i>=0;i--){
if(!dummyHolder[i][0]){
dummyHolder.splice(i,1);
}else{
break;
}
}
//loop through the raw extract
for(var i=2;i<dummyHolder.length; i++){
var dateHolder = new Date(rawWS.getRange(i,5).getValue());
if(rawWS.getRange(i,6).getValue() == tourName && rawWS.getRange(i,9).getValue() == status && dateHolder.getTime() === depDate.getTime()){
var continentLR = continentWS.getLastRow() + 1;
rawWS.getRange(i,1,).copyTo(continentWS.getRange(continentLR, 1), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}
}
}
最后一行还包含工作表名称,但rawWS是该工作表。所以我重写了范围参数。对不起,如果这不起作用。