0

フロー パネル名と ID main panel、ラベル名Label1、テキスト ボックス名myTextBox、および ID を持つボタンを使用して、シンプルな GUI を作成しましたgetETA

私の目的は、テキストボックスに値を入力して送信をクリックすると、値がスプレッドシートに書き込まれるはずです。私の問題は、入力した実際の値ではなく、スクリプトがスプレッドシートで未定義を返すことです。

var app = UiApp.createApplication();
app.setTitle("My Application");
app.add(app.loadComponent("MyGui"));
SpreadsheetApp.getActiveSpreadsheet().show(app);
var clickHandler = app.createServerHandler('clickGetETA');
clickHandler.addCallbackElement(app.getElementById('mainPanel'));
app.getElementById('getETA').addClickHandler(clickHandler);
var doc = SpreadsheetApp.getActive();
doc.show(app);

}

 // this function responds to submit button
function clickGetETA(e) {
var app = UiApp.getActiveApplication();
var textBoxValue = e.parameter.myTextBox;
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow()+1;
var lastCell = sheet.getRange("A"+lastRow);
lastCell.setValue(textBoxValue);
return app.close();

}

私はstackoverflowが初めてなので、画像を投稿するのに十分な評判がないので、画像のリンクを投稿します

画像1 画像 2 画像3 画像4 画像 5 画像 6 画像 7

4

1 に答える 1

0

スクリプトとGUIビルダーでclickHandlerを定義したことがわかりました...これは多すぎます。おそらく問題の原因です

GUIビルダーで1つを削除して、もう一度テストしてください。テストで他の問題は見られません;-)

もちろん、スクリプトでハンドラーを削除することもできますが、その場合は、ハンドラー名の近くに小さな「+」を作成してそこにパネルを配置することにより、コールバック要素も追加する必要があります。

編集: 申し訳ありませんが、GUI ビルダーには 2 つのハンドラーがあるため、2 つ多すぎます。2 つの異なるハンドラー タイプ (クリック & キー) で単一の名前を持つ単一のハンドラーを使用することはできません。ボタンに複数のハンドラーを配置する場合は、必要な数のハンドラーを定義する必要があります。必要なタイプごとに、最終的に同じものを呼び出します。関数ですが、変数名が異なります。

編集 2 SpreadsheetApp.getActiveSpreadsheet().show(app);main 関数の先頭の行もそこにあるはずがありません。後でスプレッドシートを呼び出すため、削除するだけですvar doc = SpreadsheetApp.getActive();

GUIを使用した作業コードはこちら

編集 3:質問シートを共有することで問題が解決しました。パネル名が正しく記述されていませんでした:mainPanelスクリプトとmainpanelGUI で...ああ、大文字と小文字の区別! ;-) (画像 6 に表示)

于 2012-08-27T16:30:15.573 に答える