电子表格更新时Web应用程序更新

时间:2013-09-27 12:21:58

标签: google-apps-script

我目前正在使用谷歌脚本构建一个网络应用程序,该脚本正在阅读并显示来自Google电子表格的实时数据。但是,如果更新电子表格,我希望它更新自动显示的内容,

我一直在尝试使用时间触发来刷新应用程序,但没有任何快乐......它与旧数据保持静态。

任何人都可以帮我吗??

function doGet(e) {

  var app = UiApp.createApplication().setTitle('Customer Queue App');
  var ss = SpreadsheetApp.openById("SHEET_IDHERE");

  app.add(app.createLabel(new Date()).setId("label"))
  var mypannel = app.createHorizontalPanel();
   var mypannel = app.createHorizontalPanel();


  var ss = SpreadsheetApp.openById("sheetID_HERE")

  var nc11 = ss.getRange("a2")
  var nc12 = ss.getRange("b2")
  var nc13 = ss.getRange("c2")
  var nc14 = ss.getRange("d2")
  var nc15 = ss.getRange("e2")
  var nc16 = ss.getRange("f2")
  var nc17 = ss.getRange("g2")
  var nc21 = ss.getRange("a3")
  var nc22 = ss.getRange("b3")
  var nc23 = ss.getRange("c3")
  var nc24 = ss.getRange("d3")
  var nc25 = ss.getRange("e3")
  var nc26 = ss.getRange("f3")
  var nc27 = ss.getRange("g3")


  var nv11 = nc11.getValue()
  var nv12 = nc12.getValue()
  var nv13 = nc13.getValue()
  var nv14 = nc14.getValue()
  var nv15 = nc15.getValue()
  var nv16 = nc16.getValue()
  var nv17 = nc17.getValue()
  var nv21 = nc21.getValue()
  var nv22 = nc22.getValue()
  var nv23 = nc23.getValue()
  var nv24 = nc24.getValue()
  var nv25 = nc25.getValue()
  var nv26 = nc26.getValue()
  var nv27 = nc27.getValue()

  var mygrid = app.createGrid(5, 7).setId("grid");

  mygrid.setWidget(0, 0, app.createLabel(nv12));
  mygrid.setWidget(0, 1, app.createLabel(nv13));
  mygrid.setWidget(0, 2, app.createLabel(nv14));
  mygrid.setWidget(0, 3, app.createLabel(nv15));
  mygrid.setWidget(0, 4, app.createLabel(nv16));
  mygrid.setWidget(0, 5, app.createLabel(nv17));
  mygrid.setWidget(0, 6, app.createButton("Clear Customer").setId("cc1"));
    mygrid.setWidget(1, 0, app.createLabel(nv22));
  mygrid.setWidget(1, 1, app.createLabel(nv23));
  mygrid.setWidget(1, 2, app.createLabel(nv24));
  mygrid.setWidget(1, 3, app.createLabel(nv25));
  mygrid.setWidget(1, 4, app.createLabel(nv26));
  mygrid.setWidget(1, 5, app.createLabel(nv27));
  mygrid.setWidget(1, 6, app.createButton("Clear Customer").setId("cc2"));

  mygrid.setStyleAttribute("fontSize","65pt");
  mygrid.setStyleAttribute("margin-top","5px");
  mygrid.setStyleAttribute("font-weight","bold");
  mygrid.setStyleAttribute("color","black");

  mypannel.add(mygrid);

  app.add(mypannel);

  app.addTimer(app.createServerHandler("update") , 1000);

  return app;
}

function update(e){

  var app = UiApp.getActiveApplication();
  var ss = SpreadsheetApp.openById("SHEETIDHERE")

  app.getElementById("label").setText(new Date());

  app.getElementById("grid").setVisible(true);

  app.addTimer(app.createServerHandler("update") , 1000);

  return app;
}

1 个答案:

答案 0 :(得分:0)

您必须使用与日期标签相同的步骤。

为每个元素提供一个ID,并在处理函数中重新分配一个值。

如果你每分钟都在不断更新,请注意配额......

以下是您修改后的代码:(我还更改了无效的font-size属性)

function doGet(e) {
  var app = UiApp.createApplication().setTitle('Customer Queue App');
  var ss = SpreadsheetApp.openById("0AnqS---------loZ0NFZGc");
  app.add(app.createLabel(new Date()).setId("label"))
  var mypannel = app.createHorizontalPanel();
  var mypannel = app.createHorizontalPanel();

  var nv11 = ss.getRange("a2").getValue();
  var nv12 = ss.getRange("b2").getValue();
  var nv13 = ss.getRange("c2").getValue();
  var nv14 = ss.getRange("d2").getValue();
  var nv15 = ss.getRange("e2").getValue();
  var nv16 = ss.getRange("f2").getValue();
  var nv17 = ss.getRange("g2").getValue();
  var nv21 = ss.getRange("a3").getValue();
  var nv22 = ss.getRange("b3").getValue();
  var nv23 = ss.getRange("c3").getValue();
  var nv24 = ss.getRange("d3").getValue();
  var nv25 = ss.getRange("e3").getValue();
  var nv26 = ss.getRange("f3").getValue();
  var nv27 = ss.getRange("g3").getValue();

  var mygrid = app.createGrid(5, 7).setId("grid");

  mygrid.setWidget(0, 0, app.createLabel(nv12).setId('nv12').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(0, 1, app.createLabel(nv13).setId('nv13').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(0, 2, app.createLabel(nv14).setId('nv14').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(0, 3, app.createLabel(nv15).setId('nv15').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(0, 4, app.createLabel(nv16).setId('nv16').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(0, 5, app.createLabel(nv17).setId('nv17').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(0, 6, app.createButton("Clear Customer").setId("cc1").setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(1, 0, app.createLabel(nv22).setId('nv22').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(1, 1, app.createLabel(nv23).setId('nv23').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(1, 2, app.createLabel(nv24).setId('nv24').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(1, 3, app.createLabel(nv25).setId('nv25').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(1, 4, app.createLabel(nv26).setId('nv26').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(1, 5, app.createLabel(nv27).setId('nv27').setStyleAttribute("font-size","16pt"));
  mygrid.setWidget(1, 6, app.createButton("Clear Customer").setId("cc2").setStyleAttribute("font-size","16pt"));

  mygrid.setStyleAttribute("margin-top","5px");
  mygrid.setStyleAttribute("font-weight","bold");
  mygrid.setStyleAttribute("color","black");

  mypannel.add(mygrid);

  app.add(mypannel);
  app.addTimer(app.createServerHandler("update") , 1000);
  return app;
}

function update(e){
  var app = UiApp.getActiveApplication();
  var ss = SpreadsheetApp.openById("0AnqSFd3iik------------RckloZ0NFZGc");  
  var nv11 = ss.getRange("a2").getValue();
  var nv12 = ss.getRange("b2").getValue();
  var nv13 = ss.getRange("c2").getValue();
  var nv14 = ss.getRange("d2").getValue();
  var nv15 = ss.getRange("e2").getValue();
  var nv16 = ss.getRange("f2").getValue();
  var nv17 = ss.getRange("g2").getValue();
  var nv21 = ss.getRange("a3").getValue();
  var nv22 = ss.getRange("b3").getValue();
  var nv23 = ss.getRange("c3").getValue();
  var nv24 = ss.getRange("d3").getValue();
  var nv25 = ss.getRange("e3").getValue();
  var nv26 = ss.getRange("f3").getValue();
  var nv27 = ss.getRange("g3").getValue();
  app.getElementById("label").setText(new Date());
  app.getElementById("nv12").setText(nv12);
  app.getElementById("nv13").setText(nv13);
  app.getElementById("nv14").setText(nv14);
  app.getElementById("nv15").setText(nv15);
  app.getElementById("nv16").setText(nv16);
  app.getElementById("nv17").setText(nv17);
  app.getElementById("nv22").setText(nv22);
  app.getElementById("nv23").setText(nv23);
  app.getElementById("nv24").setText(nv24);
  app.getElementById("nv25").setText(nv25);
  app.getElementById("nv26").setText(nv26);
  app.getElementById("nv27").setText(nv27);
  app.addTimer(app.createServerHandler("update") , 1000);
  return app;
}

注意:如果您在可能的情况下在for循环中构建代码,则代码可以更紧凑,更易于维护(例如,A2和G2之间的数据位于单个var row1=ss.getRange(2,1,1,7).getValues)中的同一行中并从那里循环row1[0][n]循环......等等......)但它的工作原理,它主要是一个选择的问题; - )