0

私のスクリプトは、いくつかのスプレッドシート情報を繰り返し処理しています。ドキュメントを読みましたが、スクロールパネルには子供が1人しか許可されていません。したがって、水平パネルの情報をスクロールパネル内にラップしましたが、何らかの理由で、スクロールパネルが色付きの背景だけのコンテンツで表示されることはありません。なぜこれが起こるのか、何か考えはありますか?

 var myscrollpanel = app.createScrollPanel().setPixelSize(100, 100);
  myscrollpanel.setWidth("100%");
  myscrollpanel.setStyleAttribute("background", "silver");
  var vpanel = app.createVerticalPanel();


 for (i=1; i <= mylastrow;++i)
{

 var cellsname= mydatarange.getCell(i,1).getValue().toLowerCase();
// Browser.msgBox(cellsname );
// Browser.msgBox(searchstr.toString());
 if (cellsname.toString() == searchstr.toString()) 
 {

   var panelrow = app.createHorizontalPanel();
   var ddate = app.createTextBox();
   var sbehavior = app.createTextBox();
   var sconsequence = app.createTextBox();
   var scomment = app.createLabel();
   var steacher = app.createTextBox();
   ddate.setText(mydatarange.getCell(i,5).getValue());
   sbehavior.setText(mydatarange.getCell(i,8).getValue());
   sconsequence.setText(mydatarange.getCell(i,6).getValue());
   scomment.setText(mydatarange.getCell(i,10).getValue());
   steacher.setText(mydatarange.getCell(i,7).getValue());
   panelrow.add(ddate);
   panelrow.add(sbehavior);
   panelrow.add(sconsequence);
   panelrow.add(steacher);
   panelrow.add(scomment);
   vpanel.add(panelrow);
   app.add(panelrow);


   cnt = ++cnt;

 }

 }  

//  Browser.msgBox(cnt);     

 myscrollpanel.add(vpanel);
app.add(myscrollpanel);
// return myscrollpanel;

return app    ;// update UI
4

1 に答える 1

1

コードにはいくつかの問題を引き起こす可能性のある「異常」がいくつかあります。いくつかの変更をお勧めします(以下のコードを参照)。

もう1つのポイントは、スプレッドシートをループで読み取ることはお勧めできません。一度に全範囲を読み取り、配列値を使用して反復する方が効率的です。これがコードの提案です。私はそれをテストしませんでした(そしておそらくデバッグが必要になるでしょう)が、変更を説明するためにいくつかのコメントを入れました。

  var myscrollpanel = app.createScrollPanel()//.setPixelSize(100, 100);// 100 pixel is quite small to put all the items you add !!
  myscrollpanel.setWidth("100%");// 
  myscrollpanel.setStyleAttribute("background", "silver");// this will not affect the widgets you add to the panel...
  var vpanel = app.createVerticalPanel();

  var data = mydatarange.getValues();// get all data in an array

 for (i=0; i <data.length;++i)  // and work directly with array values (indexed to 0 instead of cells indexed to 1)
{

 var cellsname= data[i][0].toString().toLowerCase();
 if (cellsname == searchstr.toString()){
   var panelrow = app.createHorizontalPanel();
   var ddate = app.createTextBox();
   var sbehavior = app.createTextBox();
   var sconsequence = app.createTextBox();
   var scomment = app.createLabel();
   var steacher = app.createTextBox();
   ddate.setText(data[i][4].getValue());
   sbehavior.setText(data[i][7].getValue());
   sconsequence.setText(data[i][5].getValue());
   scomment.setText(data[i][9].getValue());
   steacher.setText(data[i][6].getValue());
   panelrow.add(ddate);
   panelrow.add(sbehavior);
   panelrow.add(sconsequence);
   panelrow.add(steacher);
   panelrow.add(scomment);
   vpanel.add(panelrow);// add only to the panel, not to the app or the row will be outside the panel
   cnt = ++cnt;
   }
 }  
  myscrollpanel.add(vpanel);
  app.add(myscrollpanel);
  return app    ;// update UI
}
于 2013-02-18T10:02:30.960 に答える