如何从另一Google Sheets工作簿提取并同步工作表名称
跨Google Sheets工作簿提取并同步工作表名称
解决方案步骤
1. 获取目标工作簿ID
打开data.gsheet的链接,提取URL中d/与/edit之间的字符串,这就是目标工作簿的ID。你的data.gsheet ID为:1yzp4CJist1DTQOm8rRoBcD125pChorMmuY7ZnRm82-k
2. 在main.gsheet中编写同步脚本
- 打开
main.gsheet,点击顶部菜单栏「工具」>「脚本编辑器」 - 清空默认代码,粘贴以下脚本,替换
targetSpreadsheetId为你的data.gsheetID,outputSheetName为你要存放工作表名称的工作表(如"SheetNames",不存在会自动创建):
function syncSheetNames() { // 替换为data.gsheet的ID const targetSpreadsheetId = "1yzp4CJist1DTQOm8rRoBcD125pChorMmuY7ZnRm82-k"; // 替换为输出工作表名称 const outputSheetName = "SheetNames"; try { // 打开目标工作簿 const targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetId); // 获取所有工作表列表 const sheets = targetSpreadsheet.getSheets(); // 获取或创建输出工作表 let outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(outputSheetName); if (!outputSheet) { outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(outputSheetName); } // 清除旧数据(保留表头区域,从A2开始清除) outputSheet.getRange(2, 1, outputSheet.getLastRow(), 1).clearContent(); // 提取并写入所有工作表名称 const sheetNames = sheets.map(sheet => [sheet.getName()]); if (sheetNames.length > 0) { outputSheet.getRange(2, 1, sheetNames.length, 1).setValues(sheetNames); } // 记录最后同步时间(可选) outputSheet.getRange(1, 2).setValue("最后同步时间:" + new Date().toLocaleString()); } catch (e) { Logger.log("同步错误:" + e.message); SpreadsheetApp.getUi().alert("同步失败,请检查目标ID是否正确,以及是否拥有访问权限。"); } }
- 点击保存,给脚本命名(如"SyncSheetNames"),首次运行需按提示完成授权(允许脚本访问Google Sheets)。
3. 设置自动同步触发器
- 在脚本编辑器左侧点击「触发器」图标(时钟样式)
- 点击「添加触发器」,按以下配置:
- 运行函数:
syncSheetNames - 部署类型:时间驱动
- 时间类型:根据需求选择(如「小时计时器」>「每小时」,或「日计时器」>「每天」)
- 运行函数:
- 保存后,脚本会自动按设定频率同步
data.gsheet的工作表名称。
手动同步扩展(可选)
添加以下代码到脚本中,打开main.gsheet时顶部会出现「同步工具」菜单,可手动触发同步:
function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('同步工具') .addItem('同步工作表名称', 'syncSheetNames') .addToUi(); }
内容的提问来源于stack exchange,提问作者Chulho Chang
相关产品推荐
相关产品推荐

