J'ai un tableau avec des cellules qui ont des fonctions/formules, comme celle-ci:
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?
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.
// 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});
}
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 .....
J'ai créé un exemple de fichier pour vous: Ajouter une ligne avec une formule
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.
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);
}