繁体   English   中英

根据日期动态取消保护单元格 - Google 表格

[英]Dynamically unprotect cells based on a date - Google Sheets

我试图弄清楚如何完成以下任务:

  1. 保护片材
  2. 遍历每一行
  • 如果第 1 列包含比当前日期早 7 天的日期,则
    • 取消保护第 3、4、5、6 列(在该行内)
    • 否则什么都不做

我已经修改了我在网上找到的其他一些示例,但还远未成功。

保护工作表取消保护当前日期前 7 天以上的行

function serveButNotProtect() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const osh = ss.getSheetByName("Sheet1");
  const vs = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
  let p = sh.protect();
  const a = [];
  const dt = new Date();
  const dtv = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate() - 7).valueOf();
  vs.forEach((r, i) => {
    let dv = new Date(r[0]);
    if (dv > dtv) {
      a.push(sh.getRange(i + 2, 3, 1, 4))
    }
  });
  if (a && a.length > 0) {
    p.setUnprotectedRanges(a);
  }
  let b = p.getUnprotectedRanges().map(rg => [rg.getA1Notation()]).sort((a, b) => {
    let va = parseInt(a[0].slice(1, a[0].indexOf(':')));
    let vb = parseInt(b[0].slice(1, b[0].indexOf(':')));
    return va - vb;
  });
  osh.clearContents();
  osh.getRange(1, 1, b.length, b[0].length).setValues(b);
}

表0:

一个 C D
COL1 COL2 COL3 COL4 COL5
2022 年 9 月 1 日 2 3 4 5
2022 年 9 月 2 日 3 4 5 6
2022 年 9 月 3 日 4 5 6 7
2022 年 9 月 4 日 5 6 7 8
2022 年 9 月 5 日 6 7 8 9
2022 年 9 月 6 日 7 8 9 10
2022 年 9 月 7 日 8 9 10 11
2022 年 9 月 8 日 9 10 11 12
2022 年 9 月 9 日 10 11 12 13
2022 年 9 月 10 日 11 12 13 14
2022 年 9 月 11 日 12 13 14 15
2022 年 9 月 12 日 13 14 15 16
2022 年 9 月 13 日 14 15 16 17
2022 年 9 月 14 日 15 16 17 18
2022 年 9 月 15 日 16 17 18 19
2022 年 9 月 16 日 17 18 19 20
2022 年 9 月 17 日 18 19 20 21
2022 年 9 月 18 日 19 20 21 22
2022 年 9 月 19 日 20 21 22 23
2022 年 9 月 20 日 21 22 23 24

表 1:

未保护范围:

一个
C8:F8
C9:F9
C10:F10
C11:F11
C12:F12
C13:F13
C14:F14
C15:F15
C16:F16
C17:F17
C18:F18
C19:F19
C20:F20
C21:F21

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM