2017-06-28 24 views
0

昨日私はこの質問をしました:Send email notification when values in different columns increase 基本的にはパーセント計算の配列があり、最後の行の異なる列の値が増加基準を満たしていれば別のシートにコピーされます。値が増加したときにセルを別のシートにコピー

私はそれに応じてコードを変更しようとしました:私はすべてを変えただけで1つのセルは罰金ですが、複数のセルがある場合、スクリプトは一つの値だけをコピーし、それがあるとき今問題がある

function compareValue() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Perc"); 
    var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues(); 
    var list = []; 

    for(var i=0; i<data[0].length; i++){ 

    var title = data[0][i]; 
    var value = parseFloat(data[data.length -1][i]);/

    if(value >= 2){  
     var element = [title, value];  
     list.push(element)     
    }  
    } 

    if(list.length >= 1){ 
    setValues(list); 
    } 
} 


function setValues(list) { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Alert"); 
    sheet.getRange('A1:Z50').clearContent(); 
    var title = sheet.getRange(1, 1, list.length); 
    var value = sheet.getRange(1, 2, list.length); 

    for(var i=0; i<list.length;i++){ 
    title.setValue(list[i][0]); 
    value.setValue(list[i][1]); 
    } 

} 

を必要な値の数だけ繰り返されます。たとえば、値2を超えて4つのセルが増加した場合、1つの値のみがコピーされ、4回繰り返されます。私は間違って何をしていますか?ありがとうございます

+0

このコードから、配列の288番目の行だけを分析します。すべての値の変更を設定する場合は、行分析のループを追加する必要があります。 –

+0

こんにちはPierre-Marie、昨日のように最後の行を分析するだけでいいです。しかし今は、電子メールを送信する代わりに、別のシートに値をコピーしたいと思います。私はあなたのコードを変更しようとしましたが、私の方法では機能しません。 –

答えて

1

問題はあなたの価値のセットにあります。あなたのコードでは、すべての範囲の値をリストの最後の値で設定します。これはforループの最後の値になります。使い方が簡単なrange.setValues()の使用を検討してください。

function compareValue() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Perc"); 
    var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues(); 
    var list = []; 

    for(var i=0; i<data[0].length; i++){ 

    var title = data[0][i]; 
    var value = parseFloat(data[data.length -1][i]); 

    if(value >= 2){  
     var element = [title, value];  
     list.push(element)     
    }  
    } 

    if(list.length >= 1){ 
    setValues(list); 
    } 
} 


function setValues(list) { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Alert"); 
    sheet.getRange('A1:Z50').clearContent(); 
    var range = sheet.getRange(1, 1, list.length, list[0].length); 

    range.setValues(list); 

} 
+0

うわー、それはとても簡単でした。私はrange.setValuesを他のシートで何度も使用していましたので、私はそれを考えないと恥ずかしいはずです!電子メール送信でforループを使用していたので、リストを管理する唯一の方法だと思っていました。本当にありがとう、もう一度私を助けてくれた! –

関連する問題