0

スプレッドシートから実行するアプリを開発しました。フォーマットされた画面があります。doc.show(アプリ)。マスチェンジ機能あり。ユーザーに「よろしいですか ... 続行してもよろしいですか」と尋ねたいと思います。

理想的な解決策は、「続行してもOK」という応答が表示されるポップアップ フォームです。

ユーザーにプロンプ​​トを表示し、フォーマットされた画面を同時にダウンさせない応答を受け入れる方法が見つかりません。

これを行う簡単な方法があるはずです。このフォーラムや他のフォーラムを検索しましたが、Google スプレッドシートに適用できる解決策が見つかりません。

4

3 に答える 3

3

GUI ビルダーを使用するとき、UI 全体 (またはその一部) を実際にマスクし、通常は見えないパネルまたはラベルを作成するという非常に単純な解決策を見つけました。表示されると、クリックできます。再び非表示になり、標準の UI に戻ります。GUIビルダーの機能を使用して要素を前後に移動するため、マスキングは非常に簡単です(一種のマルチレイヤーデザイン)。スクリプトで定義された UI でも同じ動作が実現できると思いますが、どうすればよいかわかりません...よろしく、Serge

編集:情報:この手法を使用してインターフェイスをセットアップしたところ、非表示にされたパネルをすべての要素とともに復元する必要があることに気付きました。そうしないと、空に再表示されます。ここでの Clienthandlers の使用は、ジョブを実行する 2 つのパネルと 2 つのボタンを使用した例です。

  var panhandler0 = app.createClientHandler()
     .forTargets(panel1).setVisible(false);// hide panel1 when button 'ENTER'on panel1 is pressed
   enter.addClickHandler(panhandler0);
  var panhandler1 = app.createClientHandler()
     .forTargets(panel2,msg,grid2).setVisible(true);// show panel2 when button 'ENTER' on panel1 is pressed
   enter.addClickHandler(panhandler1);
  var panhandler2 = app.createClientHandler()
     .forTargets(panel2,msg,grid2).setVisible(true);// re-show panel2 when button 'retry'on panel2 is pressed
  retry.addClickHandler(panhandler2);
  var panhandler3 = app.createClientHandler()
     .forTargets(panel2).setVisible(false);// hide panel2  when button 'retry'on panel2 is pressed
  retry.addClickHandler(panhandler3);
  var panhandler4 = app.createClientHandler()
     .forTargets(panel1,txt,grid,hpanel).setVisible(true);// re-show panel1 when button 'retry'on panel2 is pressed

うまく動作します!

于 2012-05-13T13:12:24.437 に答える
1

Browser.MsgBox() を使用して、ユーザーの確認用にボタンを追加できます。参考URL https://developers.google.com/apps-script/class_browser

于 2012-05-12T14:46:44.223 に答える
0

これは確かに簡単なことではありません。メッセージを表示するには、独自の GUI (フォーマットされた画面) を使用する必要があります。このようにして、GUI の状態を再び復元できます。次に例を示します。

function uiTest() {
  var app = UiApp.createApplication().setTitle("UI");
  app.add(app.createGrid(1,1).setId('main'));
  createGUI(app,{});
  SpreadsheetApp.getActive().show(app);
}

function createGUI(app,p) {
  var panel = app.createVerticalPanel();
  var handler = app.createServerHandler('handler').addCallbackElement(panel);
  panel.add(
    app.createTextBox().setName('text').setId('text').setText(p.text ? p.text : "")).add(
    app.createButton('Do it').addClickHandler(handler));
  app.getElementById('main').setWidget(0,0, panel);
}

function handler(e) {
  var app = UiApp.getActiveApplication();
  var hidden = app.createHidden('oldValues', JSON.stringify(e.parameter));
  app.getElementById('main').setWidget(0,0, app.createVerticalPanel().add(
    hidden).add(
    app.createLabel("Question message")).add(
    app.createButton('Ok').addClickHandler(app.createServerHandler('after').addCallbackElement(hidden))));
  return app;
}

function after(e) {
  var app = UiApp.getActiveApplication();
  createGUI(app,JSON.parse(e.parameter.oldValues));
  return app;
}

難易度は、復元する必要がある状態の量によって異なります。何もない場合は、はるかに簡単です。この例では、テキスト ボックスの値を復元します。そこに何でも入力して、ポップアップの後にそこにあることを確認できます。

于 2012-05-12T15:09:39.167 に答える