强制Google Script数组公式重新计算(模拟CTRL+E)



我确实在这方面找到了其他几个地方,但没有答案(或者旧的答案,希望情况有所改变)。

我只是想把一个公式放在谷歌工作表单元格中(通过脚本),并让它完全刷新/重新计算。问题是,该公式返回一个值数组,如:

SORT(TRANSPOSE(QUERY(A2:B299,"Select count(A) pivot(B)")),2,FALSE)

我可以使所有的工作,直到把公式放在我想要的单元格中并选择那个单元格。但我仍然需要手动按下CTRL+E来填充数组(这是我的啤酒收藏中每个酿酒商的瓶子数量的摘要)。

我已经尝试了我通过研究找到的所有"刷新"和重新计算命令,但没有什么能让公式"接受"。或者,我寻找了一个强力解决方案——向单元格发送CTRL+E,就好像我自己按了键一样——但找不到任何可以执行Visual Basic"SendKeys"或Visual Foxpro"KEYBOARD"命令的东西。

以下是一个名为"refreshBrewerTable()"的按钮后面的谷歌脚本代码:

function refreshBrewerTable() {
  return refreshQuery(9, 13, "B", 2, "FALSE");
}
function refreshQuery(rootrow, rootcol, pivotColumn, sortColumn, sortAsc) {
  var range = sheet.getRange(rootrow, rootcol, sheet.getLastRow(), rootcol + 1)
  range.clearContent();
  range = sheet.getRange(rootrow, rootcol);
  range.setFormula('=SORT(TRANSPOSE(QUERY(A2:' + pivotColumn + sheet.getLastRow().toString() + ',"Select count(A) pivot(' + pivotColumn + ')")),' + sortColumn.toString() + ',' + sortAsc + ')');
  sheet.setActiveSelection(range.getCell(1, 1).getA1Notation());
  return true;
}

有什么想法吗?我基本上想有一个按钮,当我在墙上添加新的啤酒瓶时,它会刷新这些数据。

我想我只是在需要这个方面有点笨。

因为这已经通过脚本完成了,所以我可以简单地手动将所有CONTINUE()公式添加到"根"单元格(包含查询的单元格)的右侧。如果我在其他地方使用UNIQUE()函数来告诉我有多少不同的酿酒商(或者我正在关注的任何事情),我甚至可以明智地判断下一步该走多远。这就是CTRL+E所做的一切——将CONTINUE()公式填充到需要的位置。

不管怎样,现在一切都正常了,一旦填充了所有CONTINUE()单元格,按CTRL+E的提示就会从"根"单元格中消失。

在Google Calc中,只有当公式本身发生更改时,才能通过脚本重新计算。更改公式使用的值不会强制公式重新计算。

解决方案是添加脚本";Date.now()"至公式,由";如果";条件始终为true,并且在true时计算请求的部分。

例如:在你的代码中:

   range.setFormula('=IF(true;SORT(TRANSPOSE(QUERY(A2:' + pivotColumn + sheet.getLastRow().toString() + ',"Select count(A) pivot(' + pivotColumn + ')")),' + sortColumn.toString() + ',' + sortAsc + ');"'+Date.now()+'"');

最新更新