将 Google Sheets IF 公式转换为 Apps 脚本

Converting Google Sheets IF formula to Apps script

作为测试,我在我的传播sheet 的单元格 K2 中输入了以下公式:=IF($M2=today(),"Today")。这达到了预期的效果,我希望将其应用于下面的所有行(m3 指的是 k3,m4 指的是 k4 等),但是,这个 sheet 是通过 Google 形式更新的,所以我不能在这些单元格中留下公式,因为它会被覆盖。

因此我需要编写 运行 应用程序脚本中的公式,但是,虽然我有足够的脚本语言知识来编写基本的 If 函数,但这超出了我的技能范围。

我已经参考了这个:How to get range and then set value in Google Apps Script 并试图根据我的目的对其进行调整,但无济于事。

谁能赐教一下吗?

试试这个脚本:

function isMToday() {
  sheet = SpreadsheetApp.getActiveSheet();
  lastRow = sheet.getLastRow();

  // get M2:M range
  mRange = sheet.getRange(2, 13, lastRow - 1, 1);
  // get display values instead to avoid timezone issues
  mValues = mRange.getDisplayValues();
  today = new Date();

  // check every mValue, if today, return today, else false
  output = mValues.map(mValue => {
    mValueDate = new Date(mValue);
    if (mValueDate.getDate() == today.getDate() &&
        mValueDate.getMonth() == today.getMonth() &&
        mValueDate.getFullYear() == today.getFullYear())
      return ["Today"];
    else 
      return [false];
  });

  // write output to K2:K
  mRange.offset(0, -2).setValues(output);
}

执行后:

您不需要 AppScript 来执行此操作,即使它位于“表单响应”选项卡上。

而不是单元格 K2 中的这个公式(如您所述):

=IF($M2=today(),"Today")

在单元格 K1 中使用此公式,并删除 K 列中的所有其他公式:

=ARRAYFORMULA(IF(ROW(M:M)=1,"Today?",IF(M:M=TODAY(),"Today")))