1

Я пытаюсь написать сценарий, отображающий значение строки в файле SpreadSheet с использованием UiApp.Скрипт Google Apps запускается при изменении SpreadSheet другим сценарием

И этот скрипт должен будет обновлять данные всякий раз, когда есть изменение в SpreadSheet. Обычно это будет просто с помощью Trigger onChange.

Однако сам SpreadSheet также обновляется другой функцией, и кажется, что onChange не запускается, когда внесенные изменения вызваны другим AppScript.

Есть ли альтернативный способ достижения того, что я описал?

Код ниже, благодаря

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; 
} 

ответ

2

onChange() функция не будет иметь ссылку на интерфейс. Например, если несколько пользователей, имеющих один и тот же пользовательский интерфейс, должны обновляться?

Итак, решение вашей проблемы заключается в том, что ваш код пользовательского интерфейса регулярно проверяет электронную таблицу и обновляет пользовательский интерфейс, если таблица изменилась. Для этого вы можете использовать недокументированный метод addTimer(). См. Это SO question & answer для приятного примера

+0

Большое спасибо, Шрик, эта функция была действительно полезна. Есть ли страница или форум об этих функциях? – MikeNQ

+0

Как я уже сказал, addTimer еще недокументирован :) Надеюсь, что Google скоро станет официальным – Srik