Google 工作表单元格在特定日期删除

问题描述 投票:0回答:1

我的电子表格中有一些单元格,我想在特定日期结束时删除或删除它们。你能帮助我吗? 我已经安装了谷歌脚本。

java编程,触发删除特定日期的单元格。 等待回复

java google-apps-script google-sheets cell simple-form
1个回答
0
投票
function deleteOldRows() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const [hA, ...vs] = sh.getDataRange().getValues();
  const dtv = new Date().valueOf();
  let idx = {};
  let d = 0;
  hA.forEach((h, i) => idx[h] = i);
  vs.forEach((r, i) => {
    let dv = new Date(r[idx["COL1"]]).valueOf();
    if (dv < dtv) {
      sh.deleteRow(i + 2 - d++)
    }
  })
}

起始数据:

A B C D E
1 COL1 COL2 COL3 COL4 COL5
2 2023 年 8 月 1 日 21 14 2 24
3 2023 年 8 月 2 日 21 20 21 24
4 2023 年 8 月 3 日 17 22 23 5
5 2023 年 8 月 4 日 5 24 9 23
6 2023 年 8 月 5 日 16 3 23 14
7 2023 年 8 月 6 日 12 8 16 7
8 2023 年 8 月 7 日 21 20 14 17
9 2023年8月8日 18 8 7 24
10 2023 年 8 月 9 日 19 19 18 16
11 2023 年 8 月 10 日 22 22 4 19
12 2023 年 8 月 11 日 2 16 18 1
13 2023 年 8 月 12 日 16 8 3 20
14 2023 年 8 月 13 日 5 1 15 21
15 2023 年 8 月 14 日 11 11 13 15
16 2023年8月15日 22 13 3 6
17 2023 年 8 月 16 日 20 6 19 1
18 2023年8月17日 7 20 5 24
19 2023年8月18日 5 8 18 6
20 2023年8月19日 4 13 12 21
21 2023 年 8 月 20 日 10 7 17 14
22 2023 年 8 月 21 日 11 6 11 11
23 2023 年 8 月 22 日 21 13 7 8
24 2023 年 8 月 23 日 9 17 21 21
25 2023 年 8 月 24 日 15 0 17 23
26 2023年8月25日 12 17 21 10

结束数据:

A B C D E
1 COL1 COL2 COL3 COL4 COL5
2 2023 年 8 月 13 日 5 1 15 21
3 2023 年 8 月 14 日 11 11 13 15
4 2023年8月15日 22 13 3 6
5 2023 年 8 月 16 日 20 6 19 1
6 2023年8月17日 7 20 5 24
7 2023年8月18日 5 8 18 6
8 2023年8月19日 4 13 12 21
9 2023 年 8 月 20 日 10 7 17 14
10 2023 年 8 月 21 日 11 6 11 11
11 2023 年 8 月 22 日 21 13 7 8
12 2023 年 8 月 23 日 9 17 21 21
13 2023 年 8 月 24 日 15 0 17 23
14 2023年8月25日 12 17 21 10

如果你想保留今天,你可以这样做:

function deleteOldRows() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const [hA, ...vs] = sh.getDataRange().getValues();
  let dt = new Date();
  const dtv = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
  let idx = {};
  let d = 0;
  hA.forEach((h, i) => idx[h] = i);
  vs.forEach((r, i) => {
    let dv = new Date(r[idx["COL1"]]).valueOf();
    if (dv < dtv) {
      sh.deleteRow(i + 2 - d++)
    }
  })
}

这取决于您的日期值是否包含时间

© www.soinside.com 2019 - 2024. All rights reserved.