1

私は過去5時間、ここからすべてを試し、さらには閉じたgoogle製品フォーラムでさえも試したので、これは以前に尋ねられたことがあることを知っています。ループを停止させることができません。条件は満たされつつありますが、ループは実行され続けます。私は他の例からオンラインでコピーして自分の変数を挿入してきましたが、最終的には、シートが疲れるか何かになるまで、5行を新しいシートに数回移動させます。

getDataRangeを試しました...getRangeを試しました...varinループやその他のループを試しましたが、すべて試しました。このコードがどのように行を生成し続けるかを確認してください。新しいシートに複数回追加される:

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    if (data[i][12] == "Associate") { 
      dest.push(data[i]); 
    } Logger.log(data)
    if (dest.length > 0 ) {
    sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
    }
  }
}

助けてくれてありがとう!

4

2 に答える 2

6

user1795832はバッチ書き込みを使用せず、条件が真になるたびにシート2にデータを書き込むだけなので、user1795832の答えには本当に同意しません...では、なぜ配列を使用してそれを行うのでしょうか。

ループが完了した後、シート2にバッチ書き込みするだけで、期待どおりに機能するはずです。

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    Logger.log(data[i][12]);// just to check if the condition is true sometimes ;-)
    if (data[i][12] == "Associate") { 
      dest.push(data[i]); 
    }
  } // here is the end of the for loop

  Logger.log(dest) ; // log the dest array instead

  if (dest.length > 0 ) { // if something has been written in your array then batch write it to the dest. sheet
    sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
  }
}

編集:あなたがコピーする列を選択するためにあなたのコメントに続く他の可能性

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    Logger.log(data[i][12]);// just to check if the condition is true sometimes ;-)
    if (data[i][12] == "Associate") { 
      var destRow = []; // initialise intermediate array
      destRow.push(data[i][1],data[i][2],data[i][12]);// choose here the columns you want to add (here col2, 3 & 13)
      dest.push(destRow); 
    }
  } // here is the end of the for loop
  Logger.log(dest) ; // log the dest array instead
  if (dest.length > 0 ) { // if something has been written in your array then batch write it to the dest. sheet
    sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
  }
}
于 2012-11-12T07:01:12.003 に答える
1

うん、問題はあなたのdest変数です。各ループの後でリセットするわけではないので、各行はそこで複合され続け、毎回複製されます(したがって、3番目の行をループするとき、行1と2はまだdest変数にあります)。「dest=[];」と入力します forループのすぐ内側で機能します。

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    dest = [];
    if (data[i][12] == "Associate") { 
      dest.push(data[i]); 
    } Logger.log(data)
    if (dest.length > 0 ) {
      sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
    }
  }
}
于 2012-11-12T02:24:53.067 に答える