将 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")))
作为测试,我在我的传播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")))