使用GAS强制更新公式

时间:2019-02-28 18:38:21

标签: google-apps-script google-sheets

我有一个脚本,该脚本依赖于从另一张纸中提取的数据。唯一的问题是要花一些时间(大约10秒钟)才能完成所有更新。为此,我将QUERYIMPORTRANGE结合使用。

无需重写代码,以便GAS处理导入和SQL,是否有任何办法强制更新工作表,等同于删除单元格中的公式然后撤消?我尝试编写一些代码来做到这一点:

var sqlCell = ss.getSheetByName("LOOKUP").getRange("L4");
var sqlCellFormula = sqlCell.getFormula();
sqlCell.setFormula("");
sqlCell.setFormula(sqlCellFormula);
Utilities.sleep(1000);
SpreadsheetApp.flush();

但是由于某种原因,这根本不起作用。 SLEEPFLUSH简直是绝望!

一如既往地收到任何帮助。

1 个答案:

答案 0 :(得分:0)

未定义变量ss

尝试一下:

function sqlcell() {
  var ss=SpreadsheetApp.getActive();
  var sqlCell = ss.getSheetByName("LOOKUP").getRange("L4");
  var sqlCellFormula = sqlCell.getFormula();
  sqlCell.setFormula("");
  sqlCell.setFormula(sqlCellFormula);
}

我对此进行了一些研究,并决定将此公式放在L4中:=sum(A1:A20) 在A2中:我将= A1 + 1并复制到A20下,然后在函数中每次运行时都向A1中添加一个。

function sqlTest() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('LOOKUP');
  var rg=sh.getRange("L4");
  sh.getRange('A1').setValue(sh.getRange('A1').getValue()+1);
  //var sqlCellFormula = '=sum(A1:A20)';
  var sqlCellFormula = rg.getFormula();
  var T1=rg.getFormula();
  rg.setFormula("");
  var T2=rg.getFormula();
  rg.setFormula(sqlCellFormula);
  var T3=rg.getFormula();
  var ui=HtmlService.createHtmlOutput(Utilities.formatString('<br />T1: %s<br />T2: %s<br />T3: %s',T1,T2,T3 ));
  SpreadsheetApp.getUi().showModelessDialog(ui, 'getFormula()')
  var end="is near";
}

起初,我在T1处收到“ #REF”错误,但随后将A1重置为1,并且由于某些未知原因,它开始按预期方式工作。我不知道为什么但这可以使数据每次都稍有变化,以查看公式是否仍然有效。

很抱歉,我没有更多帮助。