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

如何修改Google Sheets脚本实现去重表头并覆盖Master表?

调整后的Google Apps Script脚本

没问题,我来帮你修改脚本,实现每次运行覆盖Master表且只保留一份表头的需求。以下是调整后的完整代码,我会在后面解释关键修改点:

function concatAllSheets() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const masterSheet = ss.getSheetByName("Master");
  
  // 1. 先清空Master表的所有内容(覆盖原有数据)
  if (masterSheet) {
    masterSheet.clearContents(); // 只清空内容,保留格式;如果要连格式也清,用clear()
  } else {
    // 如果Master表不存在,创建一个
    ss.insertSheet("Master");
    masterSheet = ss.getSheetByName("Master");
  }

  let hasWrittenHeader = false; // 标记是否已经写入表头
  const allSheets = ss.getSheets();

  for (const sheet of allSheets) {
    // 跳过Master表本身,避免循环处理自己
    if (sheet.getName() === "Master") continue;

    const dataRange = sheet.getDataRange();
    const dataValues = dataRange.getValues();
    
    if (dataValues.length === 0) continue; // 跳过空表

    let rowsToWrite;
    if (!hasWrittenHeader) {
      // 第一次处理工作表:写入表头+所有数据
      rowsToWrite = dataValues;
      hasWrittenHeader = true;
    } else {
      // 后续工作表:只写入数据(跳过第一行表头)
      rowsToWrite = dataValues.slice(1);
    }

    // 批量写入到Master表,从下一行开始
    const nextRow = masterSheet.getLastRow() + 1;
    masterSheet.getRange(nextRow, 1, rowsToWrite.length, rowsToWrite[0].length).setValues(rowsToWrite);
  }

  SpreadsheetApp.getUi().alert("合并完成!Master表已更新。");
}

关键修改点说明

  • 清空Master表:脚本开头先检查Master表是否存在,存在就清空内容(clearContents()),不存在则创建。如果需要连格式一起清空,把clearContents()换成clear()即可。
  • 避免重复表头:用hasWrittenHeader布尔值标记,第一次处理工作表时写入完整数据(包含表头),之后的工作表都跳过第一行(用slice(1)截取从第二行开始的数据)。
  • 高效批量操作:使用getValues()和setValues()批量读写数据,比逐行操作快得多,尤其适合处理5000行的大表,避免超时问题。
  • 跳过空表和Master自身:循环时跳过Master表,避免重复处理;同时跳过没有数据的工作表,减少不必要的操作。

你可以直接把这段代码替换原来的脚本,运行后就能得到符合需求的合并结果啦!

内容的提问来源于stack exchange,提问作者Nij

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:24:06