0

開発者のリストから複数の名前を選択できる小さな Google Apps スクリプトを書いています。しかし、私の doPost(e) メソッドでは、投稿された値の配列にアクセスできません (定義されていません)。すべてのチェックボックスをオンにするとイベントが発生します...

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // add the new menu
  var menuEntries = [];
  menuEntries.push({name: "Edit page", functionName: "start"})
  ss.addMenu("My tools", menuEntries);
}


function start() {

  var app  = UiApp.createApplication();
  app.setTitle("Edit page");
  var formPanel = app.createFormPanel();
  var mainPanel = app.createVerticalPanel();
  var gridPanel = app.createGrid(1, 2);

  // developpers
  var developperPanel = app.createVerticalPanel()
  var developpers = [];
  developpers.push( "John", "Peter", "Max", "Johnny" );
  for (var i = 1; i < developpers.length; ++i) {
    var checkbox = app.createCheckBox(developpers[i]).setName("dev"+i);
    developperPanel.add(checkbox);
  }
  gridPanel.setWidget(0,0,app.createLabel("Developpers : "));
  gridPanel.setWidget(0,1,developperPanel);

  // submit button
  mainPanel.add(gridPanel);
  mainPanel.add(app.createSubmitButton().setText("OK"));
  formPanel.add(mainPanel);
  app.add(formPanel);

  var ss = SpreadsheetApp.getActive();
  ss.show(app);
}

function doPost(e) {
  var app = UiApp.getActiveApplication();
  app.add(app.createLabel(e.values[0])); // Here is the error.       
  return app;
}

例では、リストは固定されていますが、実際のスクリプトでは、スプレッドシートのおかげでリストを作成しています。

ありがとう

マックス

4

2 に答える 2

1

チェックボックスの値を確認する正しい方法はe.parameter[name]、コメントで自分自身が言ったように、を使用することです。コード例を次に示します。

function start() {
  //...
  var developpers = ["John", "Peter", "Max", "Johnny"];
  //you were skiping the first developer
  for (var i = 0; i < developpers.length; ++i) { //array starts on zero, not one
    var checkbox = app.createCheckBox(developpers[i]).setName("dev"+i);
    developperPanel.add(checkbox);
  }
  //...
}

function doPost(e) {
  var app = UiApp.getActiveApplication();
  var developpers = ["John", "Peter", "Max", "Johnny"]; //repeat it here or make it global, if it's static like this
  var checked = [];
  for( var i in developpers )
    if( e.parameter['dev'+i] == 'true' )
      checked.push(developpers[i]);
  app.add(app.createLabel(checked));
  return app;
}
于 2012-07-12T13:11:39.550 に答える
0

使用する必要がありますe.parameter.yourCheckBoxName

例えば:

function doPost(e) {
  var app = UiApp.getActiveApplication();
  app.add(app.createLabel(e.parameter.dev1); // Access checkbox by its name
  return app;
}

これは、チェックボックス「Peter」がチェックされている場合のステータスを示します。必要に応じて変更できます。

于 2012-07-12T13:23:25.930 に答える