2017-09-15 3 views
1

Je suis assez mauvais au codage, mais j'ai essayé d'assembler un script pour générer un identifiant unique statique pour le placement dans une feuille de google . Ce que je voudrais arriver, c'est quand des données sont entrées dans la colonne D, la ligne équivalente dans la colonne A génère un identifiant unique qui est incrémental du dernier ID. Cependant, l'identifiant unique doit être statique dans la mesure où il n'est pas lié au numéro de ligne. L'identifiant unique doit également être incrémenté dans l'ordre dans lequel les données sont saisies dans la colonne D, qui ne seront pas nécessairement entrées en séquence avec les numéros de ligne (ID2 peut être dans la ligne 16, avec ID3 dans la ligne 6). J'ai localisé et adapté deux scripts qui, selon moi, atteignent presque ce qui doit être fait, mais ont atteint une limite de ma compréhension pour être finalisés. Quelqu'un peut-il m'aider à expliquer comment j'adapterais la fonction OnEdit pour inclure la commande setValue de la fonction OnForm?Script Google feuilles: Générer un ID unique statique qui n'est pas lié au numéro de ligne

function OnForm(){ 
 
var sh = SpreadsheetApp.getActiveSheet() 
 
var startcell = sh.getRange('A1').getValue(); 
 
if(! startcell){sh.getRange('A1').setValue(1);return}; 
 
var colValues = sh.getRange('A1:A').getValues(); 
 
var max=0;// define the max variable to a minimal value 
 
    for(var r in colValues){ // iterate the array 
 
    var vv=colValues[r][0].toString().replace(/[^0-9]/g,''); 
 
    if(Number(vv)>max){max=vv}; 
 
    } 
 
    max++ ; // increment to be 1 above max value 
 
sh.getRange(sh.getLastRow()+1, 1).setValue(Utilities.formatString('IG%05d',max)); 
 
} 
 

 

 
function onEdit(e) { 
 
var ss = e.source.getActiveSheet(); 
 
var watchedCols = [4] 
 
if (watchedCols.indexOf(e.range.columnStart) === -1) return; 
 
ss.getRange(e.range.rowStart, 2) 
 
    .setValue('unique ID here') 
 
}

Répondre

1

Si je comprends bien votre problème, vous devriez boucle à travers les valeurs de la colonne ID et la recherche de la plus grande valeur. Après avoir fait une boucle dans la colonne et avoir la plus grande valeur stockée dans une variable, il suffit d'incrémenter cette valeur et de la définir comme nouvel ID.

donc cette boucle exécuter avant de définir la valeur de la cellule:

var drang = ss.getDataRange(); 
var ids = ss.getRange(1, 2, drang.getLastRow(), 1).getValues(); 
var biggest = 0; 

for(var i = 0; i < ids.length; i++){ 
    var id = ids[i][0]; 
    if(id > biggest){ 
    biggest = id; 
    } 
} 

Et puis quand vous définissez la valeur:

ss.getRange(e.range.rowStart, 2) 
.setValue(biggest+1) 
+0

Cela semble à peu près juste pour moi. Toutes mes excuses pour la naïveté, mais avez-vous une chance de me montrer comment faire cela? – user1883984

+0

Bien sûr, j'ai édité la réponse. Notez que je ne suis pas très bien avec google script et n'ai jamais utilisé l'API de la feuille de calcul. Dites-moi si ce code ne fonctionne pas et j'y reviendrai. – VOL