0

交叉发布@Google SS 论坛

我想这样做:

function memoizeDate(condition) {
  if (condition) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var cell = sheet.getActiveCell();
    cell.setValue(Date.now());
  }
}

因此,在(比如说) cellC2中,如果您将其值设置为=memoizeDate(eq(b2,"foo")),那么一旦b2发生更改,C2就会将其自身更改为记忆值。

但是,我收到“您无权调用 setValue”错误,并且我也不确定“活动”单元格(来自脚本的 POV)是否是调用脚本的那个单元格(即C2)而不是谁知道还有什么(B2?用户可能会选择什么随机的东西?)。

4

1 回答 1

-1

您是否尝试过这样(建议):

function memoizeDate(condition) {
  if (condition) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var cell = sheet.getActiveCell();
    return new Date();
  }else{
    return 'nop or whatever'
  }
}

根据您的评论进行编辑:我一直在阅读您的问题和评论,但我不确定您真正想要做什么。

一方面,您说“覆盖函数本身”,这实际上意味着返回一个值(这就是我的代码所做的),另一方面,您尝试获取用户正在编辑的活动单元格(B2 在您的示例),在这种情况下您根本无法做到这一点,请阅读有关自定义功能的文档

自定义函数返回值,但它们不能在它们所在的单元格之外设置值。在大多数情况下,单元格 A1 中的自定义函数无法修改单元格 A5。但是,如果自定义函数返回双精度数组,则结果会溢出包含该函数的单元格并填充包含自定义函数的单元格下方和右侧的单元格。您可以使用包含 return [[1,2],[3,4]]; 的自定义函数对此进行测试。

总而言之,我认为这个问题相当不清楚,(没有个人冒犯)你至少应该尝试重新表述它。

于 2013-09-30T22:10:02.133 回答