我有一个电子表格,用于跟踪用于筹款的电视节目。我设置了一个带有脚本的按钮,用于隐藏包含过期程序(K 列)的行,该程序查看今天的日期。我想将其更改为隐藏计划从今天起 30 天后过期的行。我似乎无法让那部分工作。我从网上找到的示例中复制了代码:我知道我不需要所有这些,但我还没有开始剔除一些东西,直到它按照我想要的方式工作。
function HideExpired() {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName('PledgePrograms');
const timezone = ss.getSpreadsheetTimeZone();
const thisMonth = Utilities.formatDate(new Date(), timezone, 'yyyy-MM');
const nextMonth = thisMonth+1;
sheet.getDataRange().getValues().forEach((Column, index) => {
const date = Column[10];
const dateIsBeforeCurrentMonth = Object.prototype.toString.call(date) === '[object Date]'
&& Utilities.formatDate(date, timezone, 'yyyy-MM') < nextMonth;
if (dateIsBeforeCurrentMonth || status.match(/^(Done|Rejected)$/i)) {sheet.hideRows(index + `your text`1);
}
});
}`
试试这个:
function HideExpired() {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName('PledgePrograms');
const timezone = ss.getSpreadsheetTimeZone();
const dt = new Date();
const next = Utilities.formatDate(new Date(dt.getFullYear(), dt.getMonth() + 1), dt.getDate()).valueOf();
let d = 0;
sheet.getDataRange().getValues().forEach((row, index) => {
const date = new Date(row[10]);
const dateIsBeforeCurrentMonth = date.valueOf() < next;
if (dateIsBeforeCurrentMonth || status.match(/^(Done|Rejected)$/i)) {
sheet.hideRows(index + 2 - d++);
}
});
}
您必须首先修复状态,因为它当前未定义,并且我假设您的数据从第 2 行开始,日期来自第 11 列。如果不使用 valueOf() 或 getTime() 则无法对 Date() 对象进行数字比较