Google apps script 如果不满足第一个条件,则不执行任何操作的If语句
我正忙着编写一个包含If语句的脚本,如果不满足第一个条件,我试图让语句的else部分什么也不做。该脚本检查google驱动器文件夹中的文件名,如果存在,则应运行第一个条件,否则,如果不存在,则不应执行任何操作 我尝试过使用else{return false;},else{},但都没有起作用。我也尝试过交换周围的条件,但也不起作用 我不断收到一个错误,说“异常:无法检索下一个对象:迭代器已到达末尾。(第7行,文件“调用”)”,因为一旦从文件中检索到数据,该文件就会被删除 第一个条件工作正常,但如果文件夹中不存在csv文件,则会显示上述消息。我的想法是设置一个每分钟运行一次的触发器来检查文件夹 以下是我到目前为止的情况。任何帮助都将不胜感激Google apps script 如果不满足第一个条件,则不执行任何操作的If语句,google-apps-script,Google Apps Script,我正忙着编写一个包含If语句的脚本,如果不满足第一个条件,我试图让语句的else部分什么也不做。该脚本检查google驱动器文件夹中的文件名,如果存在,则应运行第一个条件,否则,如果不存在,则不应执行任何操作 我尝试过使用else{return false;},else{},但都没有起作用。我也尝试过交换周围的条件,但也不起作用 我不断收到一个错误,说“异常:无法检索下一个对象:迭代器已到达末尾。(第7行,文件“调用”)”,因为一旦从文件中检索到数据,该文件就会被删除 第一个条件工作正常,但如果
function calls(){
var hotFolder = DriveApp.getFolderById('idHere');
var targetSheet = SpreadsheetApp.openById('idHere').getSheetByName('sheetNameHere');
var callsSheet = SpreadsheetApp.openById('idHere').getSheetByName('sheetNameHere');
var callsCsv = hotFolder.getFilesByName('fileName.csv.Here').next();
if(callsCsv) {
var csvData = Utilities.parseCsv(callsCsv.getBlob().getDataAsString());
targetSheet.getRange(1,1,csvData.length,csvData[0].length).setValues(csvData);
callsCsv.setTrashed(true);
var targetSheetData = targetSheet.getRange(2,1,targetSheet.getLastRow()-1,targetSheet.getLastColumn()).getValues();
var handleTime = targetSheetData.map(function(row){
if([row[9]] != 'ABANDON') {
return [row[6] + row[7] +15];
} else {
return [['']];
}
});
targetSheet.getRange(2,12,handleTime.length).setValues(handleTime);
var newData = targetSheet.getRange(2,1,targetSheet.getLastRow(),targetSheet.getLastColumn()).getValues();
callsSheet.getRange(callsSheet.getLastRow,1,newData.length,newData[0].length).setValues(newData);
targetSheet.clear();
} else {
}
}
“异常:无法检索下一个对象:迭代器已到达末尾。(第7行,文件“调用”)”
您收到的错误消息是由于无法获取文件或文件夹集合中的下一项,可能是因为从上一次运行中删除了该项
在这种情况下,您可以使用hasNext()
方法。根据其报告:
hasNext()
>确定调用next()
是否将返回项目
返回
布尔值-如果next()
将返回一个项目,则为true;如果不是,则为false
因此,您可以将代码更改为:
var callsCsv = hotFolder.getFilesByName('fileName.csv.Here');
if (callsCsv.hasNext()) {
var callsCsvFile = callsCsv.next();
// your code here - callsCsv becomes callsCsvFile
}
参考文献
hasNext()
方法。根据其报告:
hasNext()
>确定调用next()
是否将返回项目
返回
布尔值-如果next()
将返回一个项目,则为true;如果不是,则为false
因此,您可以将代码更改为:
var callsCsv = hotFolder.getFilesByName('fileName.csv.Here');
if (callsCsv.hasNext()) {
var callsCsvFile = callsCsv.next();
// your code here - callsCsv becomes callsCsvFile
}
参考文献
else
,试着把重点放在varcallsCsv=hotFolder.getFilesByName('fileName.csv.Here').next()上代码>我相信这会引发边界外调用的异常。在调用迭代器中的“下一个”文件之前,请先检查迭代器是否有“下一个”文件。非常感谢@Daemon Painter&@TheMaster的回复。这完全有道理。具有讽刺意味的是,这实际上是我第一次尝试实现的目标。这是我第一次尝试学习任何编程语言,而且我刚开始学习才一个月。非常感谢您的反馈。再次感谢,工作得很有魅力!大家好,欢迎来到SO。不要把重点放在else
,试着把重点放在varcallsCsv=hotFolder.getFilesByName('fileName.csv.Here').next()上代码>我相信这会引发边界外调用的异常。在调用迭代器中的“下一个”文件之前,请先检查迭代器是否有“下一个”文件。非常感谢@Daemon Painter&@TheMaster的回复。这完全有道理。具有讽刺意味的是,这实际上是我第一次尝试实现的目标。这是我第一次尝试学习任何编程语言,而且我刚开始学习才一个月。非常感谢您的反馈。再次感谢,工作得很有魅力!谢谢@ale13。我根据您的建议添加了额外的代码行,它整理了我收到的错误消息。谢谢你的努力,我感谢你在这方面的帮助。谢谢@ale13。我根据您的建议添加了额外的代码行,它整理了我收到的错误消息。谢谢你的努力,我感谢你在这方面的帮助。