1

我正在尝试编写一个脚本,使用 UiApp 在电子表格文件中显示行值。

每当电子表格发生更改时,此脚本都需要更新数据。这通常很简单,只需触发 onChange。

但是,SpreadSheet 本身也由另一个函数更新,当所做的更改由另一个 AppScript 引起时,似乎不会触发 onChange。

有没有其他方法可以实现我所描述的?

代码如下,谢谢

    var ss = SpreadsheetApp.openById("tqwJk280I1O_yW5oNX9nLQA");

function doGet() {
  var app = UiApp.createApplication();
  var masPanel = app.createFlowPanel().setId("panel");
  var number = parseInt(ss.getRange("A1").getValue());
  masPanel.add(app.createLabel(number));
  masPanel.add(app.createFlowPanel().add(app.createFormPanel()
           .add(app.createFlowPanel()
           .add(app.createSubmitButton("Plus!")))));

  app.add(masPanel);

  return app;
}

function doPost()
{
  var num = parseInt(ss.getRange("A1").getValue()) + 1;
  ss.getRange("A1").setValue(num);
}

function onChange()
{
  ss.getRange("A2").setValue("hahaha");
  var app = UiApp.createApplication();
  app.remove(app.getElementById("panel"))
  var masPanel = app.createFlowPanel().setId("panel");
  var number = parseInt(ss.getRange("A1").getValue());
  masPanel.add(app.createLabel(number));
  masPanel.add(app.createFlowPanel().add(app.createFormPanel()
           .add(app.createFlowPanel()
           .add(app.createSubmitButton("Plus!")))));

  app.add(masPanel);

  return app;
}
4

1 回答 1

3

onChange()函数将不会引用 UI。例如,如果有多个人打开了相同的 UI,应该更新哪一个?

因此,您的问题的解决方案是让您的 UI 代码定期轮询电子表格并在电子表格发生更改时更新 UI。为此,您可以使用未记录的addTimer()方法。看到这个SO question & answer一个很好的例子

于 2013-06-28T07:16:43.513 回答