1

こんにちは、私はGoogle Appsスクリプトを初めて使用します。テキストボックスに入力した値とExcelシートの値を比較します。私のExcelシートの値は正しく表示され、テキストボックスは正しく作成されています(Excelシートに2つのエントリがあるため2つ)。私はこれを検証したいと思います: テキスト ボックスに入力したものが Excel シートの値よりも大きい場合は、それ以外の場合はエラーになります。そして、送信ボタンを使用したいと思います。電子メールの検証機能を使用した例を見ましたが、それを私の例に変換することはできません。
そして、関数validateStock(e)をデバブすると、パラメーターが未定義になります。助けてください。

function doGet() {
 var user = Session.getUser().getUserLoginId();
 var excel = SpreadsheetApp.openById("0Alg06LrHGRkddDJyMUh5bGRsZnhKQkpqYjBCN0d0X2c");
 var raw = excel.getSheets()[0];

 var app = UiApp.createApplication();
 var stockLabel = app.createLabel('Introduza a Quantidade de Stock pretendida');
 var inputBox = app.createTextBox().setId('stockBox').setName('myStock');
 var submitButton = app.createButton('Validate');
 var infoLabel = app.createLabel('Stock é Valido').setVisible(false).setId('info');
 var panel = app.createVerticalPanel();

 var list = raw.getRange("A1:A2").getValues();

 for( var i = 0; i < list.length; i++)  
 {
 //if (list[i] == user) 

 var cliente = raw.getSheetValues(i+1,2,1,1);
 app.add(app.createLabel("Stock: "+ list[i]));
 app.add(app.createTextBox());

 //raw.getSheetValues(startRow, startColumn, numRows, numColumns)

 }
 panel.add(stockLabel)
.add(inputBox)
.add(infoLabel)
.add(submitButton);

//Add the panel to the application
//Create Click handlet and add to the submit button
var handler = app.createServerClickHandler('validateStock');
handler.addCallbackElement(panel);
submitButton.addClickHandler(handler);

panel.add(stockLabel).add(inputBox).add(submitButton);
app.add(panel);
return app;
}

//Function to validate stock and display the response
function validateStock(e){
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
var excel = SpreadsheetApp.openById("0Alg06LrHGRkddDJyMUh5bGRsZnhKQkpqYjBCN0d0X2c");
var raw = excel.getSheets()[0];
var app = UiApp.getActiveApplication();
var list = raw.getRange("A1:A2").getValues();
stock = e.parameter.myStock;
Logger.log(stock);

if(emailPattern.test(stock) == false)

app.getElementById('info').setText("Invalid Email Address").setStyleAttribute("color",   "#F00").setVisible(true);
  else
    app.getElementById('info').setText("Valid Email Address").setStyleAttribute('color', '#339900').setVisible(true);
return app;
}
  else
    app.getElementById('info').setText("Valid Email Address").setStyleAttribute('color', '#339900').setVisible(true);
return app;
}
4

2 に答える 2

0

ロガーを使用してデバッグします。コールバックであるため、デバッガーで validateStock をデバッグすることはできません。(前回確認したところ、コールバック関数でデバッガが動かない)

デバッガーを使用するには、次のような関数を追加できます。

function debugValidateStock(e){
 var e.parameter.myStock = "test";
 validateStock(e);
}
于 2012-09-04T00:48:47.220 に答える
0

1 -変数 STOCK を初期化する必要があります。

stock = e.parameter.myStock;--> var stock = e.parameter.myStock

2 - パラメータ e.parameter.myStock とコールバック関数を考慮せずにプログラムを実行するには、関数validateStockの先頭で var myStock を定義する必要があります。

var stock = "*WHAT_YOU_EXPECT*" ; それ以外のstock = e.parameter.myStock;

于 2012-09-25T11:11:48.673 に答える