Bandiera di installazione in Javascript
-
09-10-2019 - |
Domanda
Di seguito è uno script che sto usando per un foglio di calcolo di Google Docs.
Questi link mostrano quello che sto facendo:
http://i.stack.imgur.com/uGik7.png
http://i.stack.imgur.com/AbKnQ.png
Come posso creare un "flag" in modo che quando ho eseguito questo script una seconda volta, ma non aggiunge gli articoli di riserva perviously aggiunti?
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());
}
}
}
}
}
Credo che sto cercando di fare questo: Una volta che l'oggetto è stato aggiunto all'inventario, lo script aggiunge una x per colonna I di quella linea. Poi, quando lo script viene eseguito nuovamente, salta sopra le righe con una x nella colonna I
Soluzione
In JavaScript, le funzioni sono oggetti. Gli oggetti hanno proprietà. Quindi, decorare la vostra funzione:
function myFunction() {
if (!myFunction.alreadyDoneRunIt) {
alert('bapt uia');
myFunction.alreadyDoneRunIt = true;
}
}
for (var i = 0; i < 10; i++) {
myFunction(); // alerts once
}
Altri suggerimenti
Designare una cella per contenere il valore di bandiera, e hanno il controllo di script che cella particolare per il valore bandiera.
Aggiungere i valori in una matrice prima. Ogni volta che si aggiunge un elemento di controllo della matrice per vedere se è già in esso. Poi ciclo l'array un post per l'interfaccia utente.
Ecco un post per aiutare con la verifica se l'array contiene già il valore. stackoverflow.com/questions/237104/