【问题标题】:function recalculates every time i open the sheet, I only want it to recalculate on edit每次打开工作表时函数都会重新计算,我只希望它在编辑时重新计算
【发布时间】:2015-12-24 04:52:09
【问题描述】:
function timestamp() {
return new Date()
}

每次我打开工作表时,该函数都会重新计算。我只希望它在编辑时重新计算。 我试图弄乱“onEdit”,但我永远无法让它工作。我也尝试过“当前项目触发器”,但这似乎并不能解决问题。我很抱歉,为了问题的简单性,我根本找不到或想出答案。 谷歌表格脚本 https://docs.google.com/spreadsheets/d/1-Ix9LUmMYNqWnz0mB2PAg9ocJ-TwszqHRbqxAchcxhc/edit#gid=0

【问题讨论】:

  • 这是一个用 Google Apps 脚本编写的自定义函数。通过在电子表格单元格中输入 =timestamp() 来使用此功能,对吗?为了将其更改为 onEdit,您必须在要查看的工作表中进行编码,以进行编辑、范围、日期应写入的位置等...
  • 现在将其用作函数效果很好。我只是希望它只会在某些事情发生变化时更新。我可以使用 onEdit 但我在多列中使用时间戳,并且每个范围的脚本长度会变得很长
  • 当前是什么导致timestamp() 函数运行? onOpen() 函数?为什么打开电子表格时会触发?
  • 这样的自定义函数永远不会起作用,因为它只会被评估一次,结果将被谷歌缓存。它在文档中进行了解释。自定义函数只能根据传递的参数进行计算。请参阅此处和其他类似的 s.o.问题:stackoverflow.com/a/17347290/2213940
  • 而不是制作一个菜单,对选定的单元格执行此操作

标签: javascript function google-apps-script google-sheets timestamp


【解决方案1】:

看起来(根据您对问题的 cmets),就像您创建了一个自定义公式并将其放入单元格中一样。如果是这种情况(意味着您实际上在单元格中有 =timestamp() ),那么它总是会在打开和编辑时重新计算。

这就是公式(标准公式和自定义公式)的工作原理。当您开始在电子表格中包含太多公式并且它开始变慢甚至无法正确加载时,您会注意到这一点。

如果您想要仅在编辑时更新的内容,则必须编写一个完全执行此操作的函数,然后设置一个在编辑时调用它的触发器。

例如,此函数会将当前日期放在当前电子表格第一张表的单元格 A1 中:

function setTimestamp()
{
    var thisSS = SpreadsheetApp.getActiveSpreadsheet();
    var firstSheet = thisSS.getSheets()[0];
    var firstCell = firstSheet.getRange(1, 1);

    firstCell.setValue(new Date());
}

这种函数只会在你调用它的时候运行,所以你可以将触发器设置为你想要的任何东西。显然,您必须弄清楚如何选择要显示日期的单元格。

【讨论】:

  • @ZigMandel,我不确定我是否理解。我创建了这个电子表格 (docs.google.com/spreadsheets/d/…),它似乎正在工作。可以看看吗?
  • @villager,对于我所处的情况,这可能会变得非常混乱。我将分享一个问题的示例链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多