[英]Dynamically unprotect cells based on a date - Google Sheets
我试图弄清楚如何完成以下任务:
我已经修改了我在网上找到的其他一些示例,但还远未成功。
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.