web-dev-qa-db-fra.com

Comment insérer automatiquement une nouvelle ligne et conserver les fonctions / formules de la dernière ligne?

J'ai un tableau avec des cellules qui ont des fonctions/formules, comme celle-ci:

enter image description here

J'ai besoin d'un script qui crée une nouvelle ligne, en copiant les fonctions/formules de la dernière ligne utilisée. Je trouve ce script qui crée une nouvelle ligne mais ne copie pas les fonctions/formules . Comment puis-je implémenter cette tâche de copie de mise en forme dans Google Apps Script sans avoir à sélectionner et copier manuellement?

22

Utilisez le code ci-dessous pour copier également les formules en tant que valeurs normales. Ajoutez le code en sélectionnant Outils dans le menu du tableur. Ensuite, sélectionnez l'éditeur de script et ajoutez le code. Assurez-vous d'appuyer sur le bouton "bug" et authentifiez le script.

Code

// global 
var ss = SpreadsheetApp.getActive();

function onOpen() {
  var menu = [{name:"Add New Last Row", functionName:"addRow"}];
  ss.addMenu("Extra", menu);
}

function addRow() {
  var sh = ss.getActiveSheet(), lRow = sh.getLastRow(); 
  var lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
  sh.insertRowsAfter(lRow, 1);
  range.copyTo(sh.getRange(lRow+1, 1, 1, lCol), {contentsOnly:false});
}

Remarque

Régler le contentOnly sur false donnera une copie standard. En le réglant sur true, seules les valeurs seront collées. Le script d'exemple que vous avez trouvé fait bien plus que coller des valeurs .....

Exemple

J'ai créé un exemple de fichier pour vous: Ajouter une ligne avec une formule

19
Jacob Jan Tuinstra

Cet ArrayFormula peut faire la même chose sans impliquer un script. Entrez-le dans D4 et il sera automatiquement reporté dans n'importe quelle quantité de cellules vides en dessous.

ArrayFormula(vlookup(B4:B:tax_table!$A$2:$G$8;3;true))

Remarques: "B4: B" signifie regarder toutes les cellules à partir de B4 jusqu'à la fin de la colonne.

ArrayFormula prend soin de se copier dans les cellules en dessous. Assurez-vous simplement que les cellules en dessous sont vides.

3
user3660579

Si vous avez besoin d'ajouter une nouvelle ligne en haut (première ligne) et de copier la formule de la première ligne en haut, vous devez copier les formules à l'aide des fonctions getFormulas() et setFormulas(). Vous pouvez modifier la valeur de firstRow en 2 si votre feuille de calcul comporte des en-têtes, par exemple.

function addFirstRow() {
    var firstRow = 1;
    var sh = ss.getActiveSheet();
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(1, 1);
    newRange = sh.getRange(firstRow, 1, 1, lCol);
    newRange.setFormulas(formulas);
}
3
dgpro