如何通过GAS/API获取通过IMPORTRANGE关联父表格的子Google Sheets列表
获取通过IMPORTRANGE关联的Google表格列表
目前Google没有提供直接返回所有关联子表格的官方API,以下是几种间接实现的方案:
1. 通过父表格的权限活动记录筛选
打开目标父表格,按以下步骤操作:
- 点击右上角「共享」→「管理访问权限」→「查看访问权限和活动」
- 切换到「活动」标签页,筛选「访问请求」类型
- 这里会显示所有子表格首次请求IMPORTRANGE授权的记录,每条记录包含请求来源的表格链接,可直接提取整理
注意:活动记录有时间范围限制,超过一定时长的历史记录可能无法查询到。
2. 用Google Apps Script遍历检测(需访问子表格权限)
如果子表格集中在某个Drive文件夹,或你有权限访问目标范围内的表格,可以编写脚本遍历表格,检查是否包含指向父表格的IMPORTRANGE公式:
function findImportRangeChildren(parentSheetId) { const parentSheetUrl = `https://docs.google.com/spreadsheets/d/${parentSheetId}`; const linkedSheets = []; // 替换为要遍历的Drive文件夹ID const targetFolder = DriveApp.getFolderById("你的文件夹ID"); const sheetFiles = targetFolder.getFilesByType(MimeType.GOOGLE_SHEETS); while (sheetFiles.hasNext()) { const file = sheetFiles.next(); const spreadsheet = SpreadsheetApp.openById(file.getId()); let isLinked = false; // 遍历表格内所有工作表 for (const sheet of spreadsheet.getSheets()) { const formulas = sheet.getDataRange().getFormulas(); // 检查所有单元格公式 for (const row of formulas) { for (const formula of row) { if (formula.includes("IMPORTRANGE") && formula.includes(parentSheetUrl)) { linkedSheets.push({ 表格名称: file.getName(), 表格ID: file.getId(), 表格链接: file.getUrl() }); isLinked = true; break; } } if (isLinked) break; } if (isLinked) break; } } // 输出结果到日志,也可写入当前表格 console.log(linkedSheets); return linkedSheets; }
局限性:只能检测你有权限访问的表格,无法覆盖外部未共享的子表格。
3. Google Workspace管理员专属方案
如果你是Google Workspace管理员,可通过Admin SDK的Reports API查询域内所有表格的IMPORTRANGE使用记录,筛选出指向目标父表格的子表格。该方案需要启用Admin API并配置相应权限,适合企业域内的批量排查场景。
内容的提问来源于stack exchange,提问作者jesh
相关产品推荐
相关产品推荐

