【问题标题】:getActiveSpreadsheet().getActiveSheet().getName() not updating with new sheet namegetActiveSpreadsheet().getActiveSheet().getName() 未使用新工作表名称更新
【发布时间】:2013-02-12 14:29:58
【问题描述】:

我正在尝试为我的学校项目创建一个通用时间表。我创建了一个简单的函数来获取活动工作表的名称。

function SetSheetName() {
 var Sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  return Sheet.getName();
}

我第一次使用它就很好用。但是,如果我更改工作表的名称并重新调用该函数,它仍然会获取工作表的旧名称。

例如,如果工作表的名称是“Sheet1”并且我在一个单元格中运行该函数,则单元格的值将是 Sheet1。但是如果我更改同一张表的名称并重新调用该函数,无论如何我仍然会得到 Sheet1。

我猜这是谷歌文档的运作方式,但我不知道如何解决这个问题。

【问题讨论】:

  • 如何更改工作表的名称?我只是手动更改了工作表的名称,它似乎对我有用。
  • 也可以直接拨打SpreadsheetApp.getActiveSheet()。 =)
  • 你怎么知道它没有获取工作表的新名称?你在使用记录器吗?还是 Browser.msgBox?
  • 如果您作为自定义函数运行,即在电子表格单元格中,那么我知道刷新自定义函数的唯一方法是强制它重新计算(显然,这不是通过更改来实现的工作表名称)。一种可能对您有用的(丑陋的)方法是使用每分钟重新计算自身的函数强制重新计算,即 GOOGLECLOCK。所以你会像这样运行你的函数: =SetSheetName(GOOGLECLOCK()) ... 但请记住它不是即时的,因为输出仅每 1 分钟重新计算一次。
  • @10basetom - 该行为是Issue 3522,此后已得到修复。

标签: google-apps-script google-sheets


【解决方案1】:

Henrique 很好地解释了为什么像这样的自定义函数不会在 Script to summarise data not updating 中更新。

归结为 Google 表格中的优化决策;仅当其参数已更改时,才会重新评估自定义函数。您的函数没有参数 - 因此在电子表格打开时永远不会重新评估它。

David Tew 提到的GOOGLECLOCK() 函数提供了每分钟一次的更改参数,该参数会导致重新评估函数,但在“新表格”中不可用。所以你运气不好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多