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

24

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

entrez la description de l'image ici

J'ai besoin d'un script qui crée une nouvelle ligne, copiant avec elle les fonctions / formules de la dernière ligne utilisée. Je trouve ce script qui crée une nouvelle ligne mais il 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?

Apprenti pythoniste
la source
si ma formule de ligne précédente est = HTTPResponse (C4) comment puis-je copier la même formule mais le nouveau numéro de cellule pour la nouvelle ligne?
user1788736

Réponses:

20

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 de la feuille de calcul. Sélectionnez ensuite l'éditeur de script et ajoutez le code. Assurez-vous d'appuyer sur le bouton "bug" et d'authentifier 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

La définition de contentOnly sur falseproduira une copie standard. Le paramétrer sur true, ne collera que les valeurs. L'exemple de script 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 des formules

Jacob Jan Tuinstra
la source
3

Cette ArrayFormula peut faire la même chose sans impliquer de 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, regardez toutes les cellules à partir de B4 jusqu'à la fin de la colonne.

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

user3660579
la source
3

Dans le cas où vous devez ajouter une nouvelle ligne en haut (première ligne) et copier la formule à partir de la première ligne supérieure, vous devrez copier les formules à l'aide de getFormulas()et des setFormulas()fonctions. Vous pouvez changer la valeur de firstRow2 si votre feuille de calcul a 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);
}
dgpro
la source
1
Salut Denis, parlez-vous du post que j'ai créé? Je vérifie simplement le script et il fonctionne toujours. Cordialement Jacob Jan
Jacob Jan Tuinstra
Salut @JacobJanTuinstra, oui tu as raison. J'essayais en fait d'ajouter une nouvelle ligne en haut et de conserver la formule de la même ligne et cela n'a pas fonctionné car le script essayait de copier les données de la ligne vide nouvellement créée. Je mettrai à jour ma réponse pour refléter cela. Merci
dgpro
Salut @DenGordo! Merci pour cela. Comment pourrais-je modifier cela si je n'ai que des valeurs à déplacer et pas des formules aussi? Merci!
Drewdavid
Oh PS - Où dois-je faire référence à quel onglet j'ai affaire? Merci encore.
Drewdavid
-2

Pour résoudre ce problème, j'ai utilisé setFormula(range), par exemple:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var cell = sheet.getRange("B5");
 cell.setFormula("=SUM(B3:B4)");

Votre formule augmentera automatiquement en fonction de l'index des lignes.

Enfin, vous pouvez ajouter un déclencheur onUpdate ou onEdit.

user70790
la source
-1; Comment le code est-il évoqué? Vous ajoutez une somme, mais vous devez ajouter une ligne physiquement. Le onUpdatedéclencheur n'existe pas.
Jacob Jan Tuinstra