Drapeau de configuration en Javascript
-
09-10-2019 - |
Question
Voici un script que je utilise pour une feuille de calcul Google Docs.
Ces liens montrent ce que je fais:
http://i.stack.imgur.com/uGik7.png
http://i.stack.imgur.com/AbKnQ.png
Comment puis-je mettre en place un « drapeau » de sorte que lorsque je lance ce script une seconde fois, il n'ajoute pas les pièces perviously ajoutée?
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Purchase Orders");
var sheet2 = ss.getSheetByName("Inventory");
var data = sheet1.getDataRange();
var i_data = sheet2.getDataRange();
var lastRow = data.getLastRow();
var iLastRow = i_data.getLastRow();
for (i=1;i<=lastRow;i++) {
if (data.getCell(i, 5).getValue() == "stock"){
for (n=1;n<=iLastRow;n++){
if (data.getCell(i,3).getValue() == i_data.getCell(n,3).getValue()) {
i_data.getCell(n, 1).setValue(i_data.getCell(n,1).getValue() + data.getCell(i,2).getValue());
}
}
}
}
}
Je suppose que je suis en train de le faire: Une fois que l'élément a été ajouté à l'inventaire, le script ajoute un x à la colonne i de cette ligne. Puis, quand le script est exécuté à nouveau, il saute sur les lignes avec un x dans la colonne i
La solution
En JavaScript, les fonctions sont des objets. Les objets ont des propriétés. Alors, décorer votre fonction:
function myFunction() {
if (!myFunction.alreadyDoneRunIt) {
alert('bapt uia');
myFunction.alreadyDoneRunIt = true;
}
}
for (var i = 0; i < 10; i++) {
myFunction(); // alerts once
}
Autres conseils
Désigner une cellule pour maintenir la valeur du drapeau, et avoir le contrôle de script cellule particulière pour la valeur du drapeau.
Ajoutez les valeurs à un tableau premier. Chaque fois que vous ajoutez un élément vérifiez le tableau pour voir si elle est déjà en elle. Puis boucle votre tableau un poste à l'interface utilisateur.
Voici un poste pour aider à vérifier si le tableau contient déjà la valeur. stackoverflow.com/questions/237104/