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

求助:编写Google Sheets脚本删除除最后一行外的所有非冻结行

解决Google Sheets定时删除非冻结行的问题

报错原因

你遇到的报错是因为用错了方法:deleteRow()只能删除单行,仅接受一个行号参数;而你传递了两个参数(起始行+行数),导致参数不匹配。要批量删除多行,应该用复数形式的deleteRows()方法,它支持两个参数:起始行号、要删除的行数。

修正后的脚本

下面是满足你需求的完整脚本,会保留第1行(冻结标题)和最后一行非冻结行,删除中间所有行:

function deleteOldRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName('Sheet'); // 替换成你的表名,如果不是默认的Sheet
  const frozenRows = sh.getFrozenRows(); // 获取冻结行数(此处为1)
  const totalRows = sh.getLastRow();
  
  // 计算要删除的起始行和行数:从冻结行的下一行开始,保留最后1行
  const startRow = frozenRows + 1;
  const rowsToDelete = totalRows - frozenRows - 1;
  
  // 确保有行可删(至少保留冻结行+1行非冻结行,避免报错)
  if (rowsToDelete > 0) {
    sh.deleteRows(startRow, rowsToDelete);
  }
}

关键说明

  • getFrozenRows():自动获取冻结行数,后续调整冻结设置无需修改代码
  • 条件判断if (rowsToDelete > 0):防止表格只有标题行+1行数据时触发错误
  • 替换'Sheet':如果你的工作表不是默认名称,改成实际表名即可

设置每日定时触发

  1. 在脚本编辑器界面,点击左侧的时钟图标(触发器)
  2. 点击右下角的添加触发器
  3. 配置选项:
    • 选择要运行的函数:deleteOldRows
    • 选择事件源:时间驱动
    • 选择时间类型:日计时器
    • 选择具体执行时段:比如你希望每天执行的时间(如上午8点)
  4. 点击保存,按提示完成授权即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:16:15