如何根据单元格中的日期加上 1 个月隐藏一行?

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

我有一个电子表格,用于跟踪用于筹款的电视节目。我设置了一个带有脚本的按钮,用于隐藏包含过期程序(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);
}
});
}`
google-apps-script google-sheets button
1个回答
0
投票

试试这个:

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() 对象进行数字比较

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