首页 > 解决方案 > 如何使用 Google 表格从 JS 调用 ISOWEEKNUM

问题描述

我想在自定义函数中从 JS 调用谷歌表格函数 ISOWEEKNUM 并且无法使其正常工作。

当前代码是

function customFun(date) {
  return ISOWEEKNUM(date);
}

但是,这只会导致错误:

ReferenceError:未定义 ISOWEEKNUM

我怎样才能让它工作,有没有参考如何调用标准函数?

标签: google-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • 您想使用 Google Apps 脚本检索周数。
  • 您想将该函数customFun用作自定义函数。

为此,这个答案怎么样?

问题和解决方法:

遗憾的是,在现阶段,Spreadsheet 的内置功能无法直接与 Google Apps Script 一起使用。而且,自定义函数不能放公式。因此,在这种情况下,需要使用解决方法。在这里,我想提出以下两种解决方法。

解决方法 1:

在此解决方法中,当=customFun(date)放置到单元格时,将替换为=ISOWEEKNUM(date)使用 OnEdit 事件触发器。

示例脚本:

为了使用这个脚本,请放到=customFun(today())一个单元格中。至此,公式=customFun(date)被替换=ISOWEEKNUM(today())为 OnEdit 事件触发器。

function customFun(date) {return ""}

function onEdit(e) {
  const range = e.range;
  const formula = range.getFormula();
  const f = formula.match(/=customFun\(([\S\s\w]+)\)/);
  if (f.length == 2) {
    range.setFormula(`ISOWEEKNUM(${f[1]})`);
  }
}

解决方法 2:

在此解决方法中,当=customFun(today())放入单元格时,周数由 Google Apps 脚本计算,并将结果值放入单元格。

示例脚本:

function customFun(date) {
  Date.prototype.getWeek = function() {
    var onejan = new Date(this.getFullYear(), 0, 1);
    return Math.ceil((((this - onejan) / 86400000) + onejan.getDay() + 1) / 7);
  }
  return date.getWeek();
}

参考:


推荐阅读