0

私のコードは、ループして毎回新しい行を取得することになっています。最初の行に進み続けることを除いて、すべてが正しく行われます。どうやら正しくループしており、カウントはしばらくの間nn機能していますが、インクリメントしようとすると失敗するため、セルの直後から開始する代わりに、開始した場所に戻ります。どんな助けでも大歓迎です、ありがとう。

function doGet() { 
var app = UiApp.createApplication().setTitle('When Am I Eligible?');
//var panel = app.createVerticalPanel()/*.setHeight("400px;")*/.setWidth("800px");
//var submitButton = app.createButton('Check');


var key= ''
var ss = SpreadsheetApp.openById(key);
  var sh = ss.getSheetByName('SHEET');
   var last=ss.getLastRow();
  var data=sh.getRange(1,1,last,5).getValues();
  var valB= Session.getEffectiveUser();
 var nn = 0;

   for (cnt=0; cnt<8; ++cnt){
  for(nn;nn<data.length;++nn){
    if (data[nn][1]==valB){
      var final = data[nn][0];
      var final1 = data[nn][1];
      var final2 = data[nn][2];
      var final3 = data[nn][3];
      var final4 = data[nn][4];


      break} ;// if a match in column B is found, break the loop
      }


 var app = UiApp.getActiveApplication();
 var panel = app.createVerticalPanel()/*.setHeight("400px;")*/.setWidth("800px");
 var answer = app.createLabel("BRO").setVisible(true).setText(final)
 var answer1 = app.createLabel("BRO").setVisible(true).setText(final1)
 var answer2 = app.createLabel("BRO").setVisible(true).setText(final2)
 var answer3 = app.createLabel("BRO").setVisible(true).setText(final3)
 var answer4 = app.createLabel("BRO").setVisible(true).setText(final4)
 panel.add(answer).add(answer1).add(answer2).add(answer3).add(answer4);
 app.add(panel);

nn++



     if (cnt == 7) {
       break}
   }
  return app;
}

問題はセルの位置data[nn]ではないようです。nn私のログデータはこれを示しています

  • [13-06-14 09:04:58:671 EDT] 6.0 これは、探しているものが見つかったときの nn です。
  • [13-06-14 09:04:58:676 EDT] 7.0 これは私がインクリメントしています。
  • [13-06-14 09:04:58:676 EDT] 1.0 セント
  • [13-06-14 09:04:58:680 EDT] 25.0 をもう一度見ると、これは再び nn 値です。
  • [13-06-14 09:04:58:680 EDT] 2.0

....等

奇妙な部分は、その発見値が最初のセルと列であることです。これらすべての奇数の値を取得しますが、最初の列と行から値を返します。

4

2 に答える 2

0

コードを最初の行から始めないのはなぜですか? コードの先頭で nn をゼロに初期化しています。nn++すべての変数が永続的ではないため、ステートメントは廃止されました。

次のようなものを試してください:

function doGet() { 
  var app = UiApp.createApplication()
                .setTitle('When Am I Eligible?').setWidth("800px");
  app.add(app.createFlowPanel().setId('list'))
     .add(app.createHidden('firstRow', 0).setId('firstRow'))
     .add(app.createButton('Check')
       .addClickHandler(app.createServerHandler('buttonClick')
         .addCallbackElement(app.getElementById('list'))
         .addCallbackElement(app.getElementById('firstRow'))));
  return app;
}

function buttonClick(e) {
  var sh = SpreadsheetApp.openById(key).getSheetByName('SHEET');
  var data = sh.getRange(1,1,sh.getLastRow(),5).getValues();
  var valB = Session.getEffectiveUser().getEmail();
  var app = UiApp.getActiveApplication();
  var list = app.getElementById('list').clear();
  var lines = 0;
  for (nn = Number(e.parameters.firstRow); nn < data.length; nn++) {
    if (data[nn][1]==valB){
      var = app.createHorizontalPanel();
      for (var i = 0; i < data[nn].length; i++)
        panel.add(app.createLabel(data[nn][i]));
      list.add(panel);
      if (++lines > 7) {
        nn++
        break;
      }
    }
  }
  app.getElementById('firstRow').setValue(nn);
  return app;
}

---> これはブラウザ ウィンドウに入力したばかりのテストされていないコードであることを忘れないでください。タイプミスについて文句を言わないでください :))

于 2013-06-14T13:33:01.293 に答える