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

如何修改谷歌Apps脚本,清除活动工作表内容时保留公式与列标题文本?

如何修改谷歌Apps脚本,清除活动工作表内容时保留公式与列标题文本?

嗨,我完全懂你现在的困惑!你的脚本已经能做到清除内容时保留公式,但现在想额外把自己设置的列标题(也就是那些用来提示数据位置的文本)也保留下来,对吧?别着急,咱们来调整一下代码就能实现这个需求。

核心思路

原来的keepFormulas函数会直接清空整个指定范围,再重新写入公式,这就把第一行的标题也清掉了。我们需要做的是:

  • 先把标题行(默认是第一行)的内容单独存下来
  • 对除了标题行之外的区域,保留公式、清除其他数据
  • 最后把标题行的内容还原回去

修改后的完整代码

function onOpen(e) {
  SpreadsheetApp.getUi().createMenu('Utills')
 .addItem("Entire current sheet", 'entireSheet')
 .addItem('Current active range', 'activeRange')
 .addToUi();
}

function entireSheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const range = sheet.getDataRange();
  keepFormulasAndHeaders(range);
}

function activeRange() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const range = sheet.getActiveRange();
  keepFormulasAndHeaders(range);
}

function keepFormulasAndHeaders(range) {
  // 获取整个范围的公式和所有单元格的值
  const formulas = range.getFormulas();
  const allValues = range.getValues();
  // 准备一个新的二维数组来存储要保留的内容
  const newContent = formulas.map((row, rowIndex) => {
    // 如果是第一行(标题行),直接保留原内容
    if (rowIndex === 0) {
      return allValues[rowIndex];
    }
    // 其他行:保留公式,没有公式的单元格设为空
    return row.map(cellFormula => cellFormula || "");
  });
  // 把处理后的内容写回范围
  range.setValues(newContent);
}

代码说明

  1. 我把原来的keepFormulas函数改成了keepFormulasAndHeaders,更贴合现在的功能
  2. 新增了allValues来获取所有单元格的内容,专门用来保留第一行的标题文本
  3. 通过map遍历每一行:
    • 第一行直接用原来的标题内容,完全不改动
    • 其他行只保留公式,没有公式的单元格就设为空(也就是清除原数据)
  4. 最后用setValues一次性把处理好的内容写回表格,这样比多次操作单元格效率更高

额外提示

如果你的标题行不是第一行(比如前两行都是标题),只需要把判断条件改成rowIndex < 2(前两行的情况),这样就能保留多行标题了。

赶紧试试修改后的脚本吧,不管是选整个工作表还是活动范围,列标题和公式都会被保留,其他数据会被清除~

备注:内容来源于stack exchange,提问作者marc Ostrensky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:04:32