如何用Google Apps Script在更新列A前仅清空该列并排除指定工作表
适配需求的修改后代码及说明
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Index Menu') .addItem('Create Index', 'createIndex') .addItem('Update Index', 'updateIndex') .addToUi(); } // 创建索引函数 function createIndex() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); var namesArray = sheetNamesIds(sheets); var indexSheetNames = namesArray[0]; var indexSheetIds = namesArray[1]; // 检查索引表是否存在 if (ss.getSheetByName('Index') == null) { var indexSheet = ss.insertSheet('Index',0); } else { var indexNewName = Browser.inputBox('名称 Index 已被使用,请输入新的索引表名称:', '名称冲突', Browser.Buttons.OK_CANCEL); if (indexNewName != 'cancel') { var indexSheet = ss.insertSheet(indexNewName,0); } else { Browser.msgBox('未创建新的索引表'); return; } } if (indexSheet) { printIndex(indexSheet,indexSheetNames,indexSheetIds); } } // 更新索引函数,默认索引表为工作簿第一个工作表 function updateIndex() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); var indexSheet = sheets[0]; var namesArray = sheetNamesIds(sheets); var indexSheetNames = namesArray[0]; var indexSheetIds = namesArray[1]; printIndex(indexSheet,indexSheetNames,indexSheetIds); } // 写入索引内容函数 function printIndex(sheet,names,formulas) { sheet.getRange(1,1).setValue('Task Index').setFontWeight('bold'); // 写入前清空A列第7行及以下的所有旧内容,清除冗余 const lastOldRow = sheet.getLastRow(); if (lastOldRow >= 7) { sheet.getRange(7, 1, lastOldRow - 6, 1).clearContent(); } // 写入新的超链接索引 if (formulas.length > 0) { sheet.getRange(7,1,formulas.length,1).setFormulas(formulas); } } // 生成工作表名称和超链接数组函数 function sheetNamesIds(sheets) { // 在这里配置不需要加入索引的工作表名称,可按需增减 const EXCLUDED_SHEET_NAMES = ["Index", "模板", "归档", "数据备份"]; var indexSheetNames = []; var indexSheetIds = []; const sheetId = SpreadsheetApp.getActiveSpreadsheet().getId(); sheets.forEach(function(sheet){ const currentSheetName = sheet.getSheetName(); // 跳过排除列表内的工作表 if (EXCLUDED_SHEET_NAMES.includes(currentSheetName)) return; indexSheetNames.push([currentSheetName]); // 自动获取当前表格ID,不需要手动修改链接内容 indexSheetIds.push([`=hyperlink("https://docs.google.com/spreadsheets/d/${sheetId}/edit#gid=${sheet.getSheetId()}","${currentSheetName}")`]); }); return [indexSheetNames, indexSheetIds]; }
修改说明
- 指定工作表排除:在
sheetNamesIds函数开头的EXCLUDED_SHEET_NAMES数组里添加你不需要出现在索引中的工作表名称即可,默认已排除索引表本身 - 清空冗余旧数据:
printIndex函数新增了写入前清空逻辑,每次更新索引前会先把A列第7行及以下的所有旧内容全部清空,不会残留无效的索引条目 - 自动适配表格ID:优化了超链接生成逻辑,会自动读取当前表格的ID,不需要手动修改链接内的占位符
- 手动触发更新:当前代码只有手动点击顶部菜单「Index Menu」→「Update Index」时才会更新索引,用户删除工作表的操作不会自动同步到索引表,符合使用场景要求
内容的提问来源于stack exchange,提问作者Adithya Shreshti
相关产品推荐
相关产品推荐

