0

ボタンを複数回 (つまり、複数回クリック) 起動させようとしていますが、機能していないようです。どんな助けでも大歓迎です。理論的には複数回起動するはずですが、ログで確認すると1回しか起動しません

function a 
{
...
 var addcolumnspanel = app.createHorizontalPanel().setId("addcolumnspanel");
  var addbuttonhandler = app.createServerHandler("addcolumn");
  var addbutton = app.createButton().setId("btnaddcolumn").setText("Add another column").addClickHandler(addbuttonhandler);  

...
return app;
}

function addcolumn()
{
...//Do some stuff
return app;
}

これはより正確なコード例です

//set global var
var counter = 1; 
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Set up the Menu bar 
function onOpen() {
//  Logger.clear();
  var menuEntries = [ {name: "demo", functionName: "myFunction"}];
  ss.addMenu("Demo", menuEntries);

}

function myFunction() {

  var myapp = UiApp.createApplication().setHeight(430).setWidth(800);;
  var button = myapp.createButton("Clicky");
  var myhandler = myapp.createServerHandler("secondfunction");
  var myhandler = button.addClickHandler(myhandler)
  myapp.add(button);
  ss.show(myapp);
}

function secondfunction()
{
  counter++;
   Logger.log(counter);

}
4

1 に答える 1

0

わかった。問題はカウンター変数にあります。Apps Script でそのようにグローバル変数を使用することはできません。詳細については、この回答を参照してください。代わりに ScriptProperties または CacheService を使用できます。

var ss = SpreadsheetApp.getActiveSpreadsheet();
//Set up the Menu bar 
function onOpen() {
//  Logger.clear();
  var menuEntries = [ {name: "demo", functionName: "myFunction"}];
  ss.addMenu("Demo", menuEntries);
  // Store your counter in CacheService as a string.
  CacheService.getPrivateCache().put('counter','1',3600); 
}

function myFunction() {

  var myapp = UiApp.createApplication().setHeight(430).setWidth(800);;
  var button = myapp.createButton("Clicky");
  var myhandler = myapp.createServerHandler("secondfunction");
  var myhandler = button.addClickHandler(myhandler)
  myapp.add(button);
  ss.show(myapp);
}

function secondfunction()
{
   var cache = CacheService.getPrivateCache();
   var counter = parseInt(cache.get('counter'));
   counter ++; 
   cache.put('counter', counter.toString());
   Logger.log(counter);

}
于 2013-05-15T04:46:25.033 に答える