Google Apps Script:调用getGdriveLink返回null但内部日志正常
问题分析
你遇到的问题核心是递归调用未返回结果:当文件在子文件夹中被找到时,递归的getGdriveLink函数确实返回了正确的URL,但外层的函数没有捕获这个返回值并继续向上传递,导致最终getGdriveLinks中接收的fileLink为null。
修复后的代码
function getGdriveLinks() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('Test'); const fileNames = sheet.getRange('C2:C').getValues(); const mainFolder = DriveApp.getFolderById('Folder ID'); for (var i = 0; i < fileNames.filter(String).length; i++){ var fileName = fileNames[i][0].toString(); var fileLink = getGdriveLink(fileName,mainFolder); Logger.log(fileLink); } } function getGdriveLink(searchFileName,folder){ var mainFiles = folder.getFiles(); while (mainFiles.hasNext()){ var file = mainFiles.next(); if(file.getName().indexOf(searchFileName) != -1){ Logger.log(file.getUrl()); return file.getUrl(); } } var subFolders = folder.getFolders(); while (subFolders.hasNext()){ var subFolder = subFolders.next(); // 接收递归调用的结果 var result = getGdriveLink(searchFileName,subFolder); // 如果找到结果,立即返回给上层 if(result !== null){ return result; } } // 遍历完所有文件和子文件夹都没找到时,返回null return null; }
关键修改说明
- 在遍历子文件夹的循环中,将递归调用的结果存入变量
result - 检查
result是否不为null,如果找到文件则立即返回该结果,避免无效的后续遍历 - 函数末尾添加
return null,明确没有找到文件时的返回值,逻辑更清晰
这样修改后,无论文件在主文件夹还是嵌套的子文件夹中,找到的URL都会正确传递回getGdriveLinks函数,Logger.log(fileLink)就能输出正确的链接了。
内容的提问来源于stack exchange,提问作者Jordzzz
相关产品推荐
相关产品推荐

