You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:48:00