如何用Apps Script通过ID获取Google Form标题?视图ID适配故障
解决Google Apps Script无法获取视图模式Google Form标题的问题
问题原因
你遇到的问题是因为视图模式Google Form里的ID(即https://docs.google.com/forms/d/e/[ID]/viewform中的ID)并不是Drive文件的ID,而是表单的发布视图专属ID,DriveApp.getFileById()自然找不到对应的文件。你之前修改的var file = DriveApp.getFileById(form.getId());写法无效,是因为代码里根本没定义form对象。
修复后的脚本
下面是修改后的完整脚本,增加了对表单视图ID的处理逻辑:
/** START List of File Names by FileIDs */ function getFileNames() { const sheet = SpreadsheetApp.getActive().getSheetByName("P12"); // 指定目标工作表 const ids = sheet.getRange("A1:a").getValues().flat().filter(String); // 提取A列的所有ID const table = []; for (let id of ids) { let name = ''; try { // 先尝试用Drive服务获取普通文件标题 const file = DriveApp.getFileById(id); name = file.getName(); } catch(e) { // Drive获取失败,尝试处理Google Form视图ID try { // 构造表单视图链接并打开 const formUrl = `https://docs.google.com/forms/d/e/${id}/viewform`; const form = FormApp.openByUrl(formUrl); name = form.getTitle(); } catch(formErr) { // 两种方式都失败,留空 name = ''; } } table.push([name]); } // 将结果写入D列(第4列) sheet.getRange(1, 4, table.length, table[0].length).setValues(table); } /** END List of File Names by FileIDs */
关键修改说明
- 增加双层try-catch逻辑:先尝试用Drive服务获取普通文件标题,失败后自动切换到Form服务处理表单视图ID
- 针对表单视图ID,通过构造完整的视图链接,用
FormApp.openByUrl()打开表单,再调用getTitle()获取标题 - 统一变量声明方式,让代码结构更清晰
内容的提问来源于stack exchange,提问作者Felipe S
相关产品推荐
相关产品推荐

