实现Google Sheet到期节目行自动移至表格底部
实现Google Sheet到期节目行自动/半自动移至底部
半自动快速操作(无需脚本)
- 添加辅助列:在表格最后一列插入新列,表头设为「到期标记」,在第二行输入公式
=IF(TODAY()-X2>=30,"到期","")(将X2替换为你表格中到期日期单元格的位置,比如到期日期在B列就用B2),下拉填充整列。 - 启用筛选:选中表头行,点击顶部菜单栏「数据」>「创建筛选」。
- 筛选到期行:点击「到期标记」列的筛选按钮,只勾选「到期」,此时所有标黑的到期行都会被单独显示。
- 剪切粘贴:选中所有筛选出的到期行(避开表头),右键选择「剪切」,滚动到表格最后一行的下一行,右键「粘贴」。
- 取消筛选:再次点击「数据」>「移除筛选」,完成操作。
自动脚本实现(定时自动执行)
- 打开你的Google Sheet,点击顶部菜单栏「扩展程序」>「Apps Script」。
- 删除默认代码,粘贴以下脚本:
function moveExpiredRows() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const dataRange = sheet.getDataRange(); const values = dataRange.getValues(); const headerRow = values[0]; const expiredRows = []; const remainingRows = [headerRow]; // 替换这里的数字为到期日期所在列的索引(A列=0,B列=1,以此类推) const dateColumnIndex = 1; values.forEach((row, index) => { if (index === 0) return; // 跳过表头 const expireDate = new Date(row[dateColumnIndex]); if (!expireDate.getTime()) return; // 跳过空日期行 const today = new Date(); const dayDiff = Math.floor((today.getTime() - expireDate.getTime()) / (1000 * 3600 * 24)); if (dayDiff >= 30) { expiredRows.push(row); } else { remainingRows.push(row); } }); // 合并剩余行与到期行(到期行放底部) const newData = [...remainingRows, ...expiredRows]; // 写入新数据 dataRange.clearContent(); sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData); }
- 调整脚本中的
dateColumnIndex:根据你表格里到期日期的实际列修改(比如日期在A列就设为0)。 - 保存脚本:点击左上角「保存」按钮,命名为
MoveExpiredRows。 - 设置定时触发:
- 点击左侧菜单栏的「触发器」图标(时钟形状)。
- 点击「添加触发器」,按以下设置:
- 选择要运行的函数:
moveExpiredRows - 选择事件源:「时间驱动」
- 选择类型:「每天计时器」,设置合适的执行时间(比如凌晨2点)
- 选择要运行的函数:
- 点击「保存」,按提示完成权限授权即可。
注意事项
- 半自动方法适合临时手动处理,无需额外权限;自动脚本适合定期自动整理,需授权Google Apps Script。
- 首次运行脚本时,会提示“此应用未验证”,点击「高级」>「转到XXX(不安全)」即可完成授权(这是Google对自定义脚本的常规提示,你的脚本仅在自己的表格中运行)。
- 操作前建议备份表格,避免数据意外丢失。
内容的提问来源于stack exchange,提问作者Tod Poirier
相关产品推荐
相关产品推荐

