0

Ich bin ein Anfänger zu Anwendungen Skript, ich möchte ein Preis-Skript zu tun, habe ich zwei Spalten eine Spalte erhält Daten über blockspring addon und import.io, dies bieten Informationen über eine Website, eine Spalte Name des Produkts und der andere der Preis für dieses Produkt. Ich möchte einen Weg, um mich zu bemerken, wenn Preis ändern, so dass ich ein Skript, kopieren Sie die Werte dieser beiden Spalten erstellen, speichern Sie sie, und wenn ich es auslösen, erhalten Sie die Daten aus beiden Spalten und vergleichen Sie es jetzt für den Test I habe ein einfaches alter Feld, das mir sagt, wenn sich einige Daten ändern.Vergleichen Sie zwei Arrays in Apps Skript funktioniert nicht

Für jetzt konnte ich ein Skript schreiben, das die Werte erhalten und vergleichen, aber aus einem unbekannten Grund funktioniert es nicht.

Dies ist mein Skript. Vielleicht würde ich in Zukunft gerne darauf hinweisen, welche Daten sich speziell ändern, aber dies ist mein erster Skript-Sohn, den ich versuche, es leicht zu machen.

Dies ist die Tabelle Ich bin mit Arbeits

https://docs.google.com/spreadsheets/d/1HleYu-dCbUReOH-7SnEFipJa6E9wEcEzasQ7ns2tXso/edit?usp=sharing

function moveValuesOnly() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var source1 = ss.getRange("A15:A105"); 
    var source2 = ss.getRange("B15:B105"); 
    var source3 = ss.getRange("A16:A105").getValues(); 
    var source4 = ss.getRange("E16:E105").getValues(); 
    var source5 = ss.getRange("E15:E105"); 

    if (source5.isBlank()) { 

    source1.copyTo(ss.getRange("E15:E105"), {contentsOnly: true}); 
    source2.copyTo(ss.getRange("F15:F105"), {contentsOnly: true}); 
    Browser.msgBox('VALUES COPIED !', Browser.Buttons.OK); 
} 


if (source3 == source4) { 
Browser.msgBox('NOTHING CHANGES !', Browser.Buttons.OK); 
} 

else { 
Browser.msgBox('SOMETHING CHANGES!', Browser.Buttons.OK); 
} 

} 

Antwort

0

Es ist nicht möglich, Arrays von == Verfahren zu vergleichen. Sie müssen jedes einzelne Element durchlaufen und einen Vergleich durchführen.

var Inspector = false; 
for(var i=0;i<source3.length;i++) 
{ 
if(source3[i][0].toString() != source4[i][0].toString()) 
{ 
Inspector = true; 
} 
} 

if(Inspector) 
{ 
Browser.msgBox('SOMETHING CHANGES!', Browser.Buttons.OK); 
} 
else 
{ 
Browser.msgBox('NOTHING CHANGES !', Browser.Buttons.OK); 
} 
0

Sie können solche Bereiche nicht vergleichen, da es sich um zweidimensionale Arrays handelt. Ich habe Ihren Code geändert und eine Funktion zum Vergleichen von 2 Spalten hinzugefügt. Es wird nicht für Bereiche mit mehr Spalten funktionieren, aber es ist einfach, es zu verbessern, wenn Sie es brauchen.

function moveValuesOnly() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var source1 = ss.getRange("A15:A105"); 
    var source2 = ss.getRange("B15:B105"); 
    var source3 = ss.getRange("A16:A105").getValues(); 
    var source4 = ss.getRange("E16:E105").getValues(); 
    var source5 = ss.getRange("E15:E105"); 

    if (source5.isBlank()) { 

    source1.copyTo(ss.getRange("E15:E105"), {contentsOnly: true}); 
    source2.copyTo(ss.getRange("F15:F105"), {contentsOnly: true}); 
    Browser.msgBox('VALUES COPIED !', Browser.Buttons.OK); 
    } 

    function equalColumns(col1, col2) { 

    if (col1.length !== col2.length) return false; 
    var equal = true; 
    for (var i = 0; i < col1.length; i ++) {  
     if (col1[i][0] !== col2[i][0]) {   
     equal = false; 
     break; 
     } 
    };  
    return equal; 
    } 


if (equalColumns(source3,source4)) { 

    Browser.msgBox('NOTHING CHANGES !', Browser.Buttons.OK); 
    } 

    else { 
    Browser.msgBox('SOMETHING CHANGES!', Browser.Buttons.OK); 
    } 

}