Google Apps Script二次运行覆盖原有超链接变为undefined问题咨询
错误原因
getLinkForFolderName_函数仅在首次创建新文件夹的分支逻辑中返回了文件夹URL,当文件夹已存在、走已有文件夹查询分支时没有定义返回值,因此第二次运行脚本时,已有文件夹对应的返回值为undefined,就会把原有正确超链接覆盖为错误格式。
修复后完整代码
function creatFolder() { const parent = DriveApp.getFolderById("insert folder id"); const sheet = SpreadsheetApp.getActive().getSheetByName('Detailing'); const range = sheet.getRange(2, 1, sheet.getLastRow() - 2); range.getValues().forEach(function (row, index) { if(row[0]) { var newLink = getLinkForFolderName_(parent, row[0]); range.offset(index, 0, 1).setFormula( "HYPERLINK(\"" + newLink + "\", \"" + row[0] + "\")" ); } }); } function getLinkForFolderName_(root, name) { var folder; const search = root.getFoldersByName(name); if (search.hasNext()) { folder = search.next(); if (search.hasNext()) console.warn("Multiple folders named '" + name + "' in root folder '" + root.getName() + "'"); // 补充已有文件夹场景的URL返回逻辑 return folder.getUrl(); } else { folder = root.createFolder(name); ["Quotes", "Construction dwg's", "Window Schedule", "Data File", "Delivery Photos"].forEach(function(e) { folder.createFolder(e); }); return folder.getUrl(); } }
可选优化
可以新增已有合法超链接的判断逻辑,读取单元格现有公式后跳过已配置正确链接的单元格,减少不必要的写入操作,降低脚本运行耗时。
内容的提问来源于stack exchange,提问作者banksie
相关产品推荐
相关产品推荐

