0

いくつかのテキストボックスといくつかのボタンだけのシンプルなUIを作成しました。コンセプトは基本的に、私が管理しているスプレッドシートの投票アプリのコンセプトです。スクリプトが実行されると、スプレッドシートの各行がテキストボックスに表示され、ユーザーがそのアイテムに投票できるようになります。UIを手動で作成しました。

function BuildUI() {
var app = UiApp.createApplication().setTitle("Voting Machine").setWidth(700);
var doc = SpreadsheetApp.getActiveSpreadsheet();
var buttonWidth = "125px";

// Panels
var mainPanel = app.createVerticalPanel();
var horzPanel = app.createHorizontalPanel();
var buttonGrid = app.createGrid(1,3);

// Textboxes
var txtCat = app.createTextBox().setName("txtCat").setId("txtCat");
var txtIdea = app.createTextBox().setName("txtIdea").setId("txtIdea");

// Handlers
var handler = app.createServerHandler();
handler.setCallbackFunction("recordVote");
handler.addCallbackElement(txtCat).addCallbackElement(txtIdea);

// Buttons
var voteNo = app.createButton("No").setId("voteNo")
  .addClickHandler(handler).setWidth(buttonWidth);
var voteMaybe = app.createButton("Maybe").setId("voteMaybe")
  .addClickHandler(handler).setWidth(buttonWidth);
var voteYes = app.createButton("Yes").setId("voteYes")
  .addClickHandler(handler).setWidth(buttonWidth);

horzPanel.add(txtCat).add(txtIdea)
buttonGrid.setWidget(0, 0, voteNo)
  .setWidget(0, 1, voteMaybe)
  .setWidget(0, 2, voteYes);
mainPanel.add(horzPanel).add(buttonGrid);

app.add(mainPanel);
doc.add(app);
}

問題は、NextIdea関数を呼び出すと、次のエラーが発生することです。

function NextIdea() {
var app = UiApp.getActiveApplication();
... Get the next row of the spreadsheet ...
app.getElementById("txtCat").setText("TestValue"); // <--- This is the error line

テキストボックスにテキストを設定しようとすると、「オブジェクトはプロパティの追加または変更を許可していません」というエラーが表示されます。デバッグウィンドウでは、オブジェクト番号が表示されますが、プロパティがなく.getText、未定義として返されます。

これらは両方とも、スプレッドシートのカスタムメニュー項目によって呼び出されるProcessVotes関数によって起動されます。

function ProcessVotes() {
BuildUI();
NextIdea();
}

これはGASを作成する最初の試みですが、何が欠けているのかわかりません。関数の最後で使用している例はたくさんありreturn app;ますが、スクリプトがサービスとして公開されている場合にのみ使用されるという印象を受けています。スプレッドシート内でこれを使用しようとしています(onOpenの代わりに使用するonGetなど)

4

1 に答える 1

0

この部分で:

function NextIdea() {
var app = UiApp.getActiveApplication();
... Get the next row of the spreadsheet ...
app.getElementById("txtCat").setText(nextRowCat) // <--- This is the error line

nextRowCat とは? それは文字列であるはずですか(その後、「」を忘れました)?文字列値を持つ変数ですか?

とにかく、それは文字列でなければなりません;-)

コメントに従って編集してください: この新しいバージョンでコードを正確に試しましたか ( .setText("TestValue"))?

また、メイン関数 (UI インスタンス アプリを作成する関数) に show(app) が表示されません。エラーが発生する実行可能なコード。

未定義の戻り値に関してgetText()は、これは通常の動作です。textBox にはそのようなメソッドはありません...( docs を参照) その値を取得する通常の方法e.parameter.textBoxNameは、ハンドラー関数で使用することです。

于 2012-09-05T16:54:54.207 に答える