web-dev-qa-db-ja.com

GoogleスプレッドシートスクリプトでForループを解除/終了する方法

Googlesheetsスクリプトで特定の論理条件が真の場合に、ループから抜け出す/関数を停止するにはどうすればよいですか。私の場合、ループ内でセルB1の値を継続的に設定し、セルD11の結果を評価するプログラムがあります。

結果が文字列NNNの場合、プログラムはすぐに停止する必要があります。

以下は私が持っているものですが、論理条件が真の場合、プログラムは終了/停止/終了しません(それ以外の場合、プログラムは正常に動作します)。助けていただければ幸いです。


function loopX() {
  var xx;
  var yy;
......
  for (var i = 0; i < data.length; i++) {
    sheet.getRange('B1').setValue(data[i][0]);
    SpreadsheetApp.flush();
    Utilities.sleep(4000);
    if (sheet.getRange('D11').getValue() == 'NNN') 

      exit();

  }
......
}

更新しました

function loopC() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('SheetN'); // name of your sheet
    var data = ss.getSheetByName('data').getRange('A625:A2910').getValues()‌​;
    if (sheet.getRange('D11').getValue() != "NNN") {
        for (var i = 0; i < data.length; i++) {
            sheet.getRange('B1').setValue(data[i][0]);
            SpreadsheetApp.flush();
            Utilities.sleep(4000);
        }
    }
}
3
Tapan Samaddar

breakを使用して、FORLOOPから出ることができます。これは簡単な方法だと思います。

サンプルスクリプト:

_var ar = [["e1"], ["e2"], ["e3"], ["e4"], ["NNN"], ["e6"]];
for (var i = 0; i < ar.length; i++) {
  if (ar[i][0] == 'NNN') {
      break;
  }
}
Logger.log(i) // 4
_

スクリプトを変更しました:

これがスクリプトに反映されている場合は、次のように変更できます。

_function loopX() {
  var xx;
  var yy;
......
  for (var i = 0; i < data.length; i++) {
    sheet.getRange('B1').setValue(data[i][0]);
    SpreadsheetApp.flush();
    Utilities.sleep(4000);
    if (sheet.getRange('D11').getValue() == 'NNN') {
      break;
    }
  }
......
}
_

しかし、あなたのスクリプトでは、sheet.getRange('D11').getValue()は以下のようにFORLOOPから書き込めるかもしれないと思います。これについては、スクリプトの詳細がわかりませんので、ご確認ください。

_if (sheet.getRange('D11').getValue() != 'NNN') {
  for (var i = 0; i < data.length; i++) {
    sheet.getRange('B1').setValue(data[i][0]);
    SpreadsheetApp.flush();
    Utilities.sleep(4000);
  }
}
_
5
Tanaike