使用Google Apps Script获取指定Google Sheets的工作表数量
适配改造方案
完全可以对原有代码做扩展改造,以下是支持传入文件ID、Google工作簿URL、文件名三种参数的自定义函数实现,同时做了错误兼容处理。
完整实现代码
function getNumSheets(input) { // 空输入直接返回0 if (!input) return 0; let fileId = ''; const inputStr = input.toString().trim(); // 1. 优先从URL中提取文件ID const urlMatch = inputStr.match(/\/d\/([a-zA-Z0-9-_]+)/); if (urlMatch) { fileId = urlMatch[1]; } // 2. 匹配纯文件ID格式(Google Drive文件ID长度为33-44位,仅含字母、数字、-、_) else if (/^[a-zA-Z0-9-_]{33,44}$/.test(inputStr)) { fileId = inputStr; } // 3. 按文件名搜索匹配的Google表格文件 else { const files = DriveApp.getFilesByName(inputStr); let sheetFile = null; // 遍历结果,取第一个匹配的Google工作簿 while (files.hasNext()) { const file = files.next(); if (file.getMimeType() === MimeType.GOOGLE_SHEETS) { sheetFile = file; break; } } if (!sheetFile) return "未找到对应名称的Google工作簿"; fileId = sheetFile.getId(); } try { // 打开目标工作簿统计工作表总数 const targetSpreadsheet = SpreadsheetApp.openById(fileId); return targetSpreadsheet.getSheets().length; } catch (e) { // 捕获权限不足、文件不存在、非Google表格等异常 return "读取失败,请检查ID/URL/文件名是否正确、是否有文件访问权限、文件是否为Google工作簿格式"; } }
使用方法
- 你清单里的
GDrive_ID、URL、File_Name三个字段的单元格都可以直接作为参数传入:- 传入ID列单元格示例:
=getNumSheets(A2)(假设A列存储GDrive_ID,数据从第2行开始) - 传入URL列单元格示例:
=getNumSheets(D2)(假设D列存储文件URL) - 传入文件名列单元格示例:
=getNumSheets(B2)(假设B列存储File_Name)
- 传入ID列单元格示例:
- 第一次输入公式回车后会弹出授权提示,按流程完成账号授权即可正常返回结果。
注意事项
- 优先使用文件ID或URL作为入参:按文件名搜索时如果存在重名文件,函数只会返回第一个匹配到的Google工作簿的工作表数,可能出现统计偏差。
- 仅支持统计已转换为Google Sheets格式的工作簿:清单里原生
.xls/.xlsx格式的Excel文件无法直接通过SpreadsheetApp读取,需要先转换为Google工作簿格式才能统计。 - 如果返回错误提示,优先排查三个问题:传入的参数是否准确、当前账号是否有目标文件的查看权限、目标文件是否为Google Sheets格式。
内容的提问来源于stack exchange,提问作者Emerson Nery
相关产品推荐
相关产品推荐

