Wie füge ich automatisch eine neue Zeile ein und behalte Funktionen / Formeln aus der letzten Zeile?

24

Ich habe eine Tabelle mit Zellen, die Funktionen / Formeln haben, wie diese:

Bildbeschreibung hier eingeben

Ich benötige ein Skript, das eine neue Zeile erstellt und damit die Funktionen / Formeln der zuletzt verwendeten Zeile kopiert. Ich finde dieses Skript, das eine neue Zeile erstellt, aber keine Funktionen / Formeln kopiert . Wie kann ich diese Formatierungskopieraufgabe in Google Apps Script implementieren, ohne sie manuell auswählen und kopieren zu müssen?

Pythonistas Lehrling
quelle
Wenn meine vorherige Zeilenformel = HTTPResponse (C4) ist, wie kann ich dieselbe Formel aber neue Zellennummer für neue Zeile kopieren?
user1788736

Antworten:

20

Verwenden Sie den folgenden Code, um auch Formeln als normale Werte zu kopieren. Fügen Sie den Code hinzu, indem Sie im Tabellenkalkulationsmenü die Option Extras auswählen. Wählen Sie dann den Skript-Editor und fügen Sie den Code hinzu. Stellen Sie sicher, dass Sie auf die Schaltfläche "Fehler" klicken und das Skript authentifizieren.

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});
}

Anmerkung

Wenn Sie contentOnly auf festlegen , falsewird eine Standardkopie erstellt. Wenn Sie diese Option auf setzen true, werden nur Werte eingefügt. Das Beispielskript, das Sie gefunden haben, ist weitaus mehr als das Einfügen von Werten.

Beispiel

Ich habe eine Beispieldatei für Sie erstellt: Zeile mit Formulas hinzufügen

Jacob Jan Tuinstra
quelle
3

Diese ArrayFormula kann genau dasselbe tun, ohne dass ein Skript erforderlich ist. Geben Sie es in D4 ein und es wird automatisch in eine beliebige Anzahl von leeren Zellen darunter übertragen.

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

Anmerkungen: "B4: B" bedeutet, dass alle Zellen von B4 bis zum Ende der Spalte betrachtet werden.

Währenddessen kopiert sich ArrayFormula selbst in die Zellen darunter. Stellen Sie einfach sicher, dass die Zellen darunter leer sind.

user3660579
quelle
3

Falls Sie eine neue Zeile oben (erste Zeile) hinzufügen und die Formel aus der ersten oberen Zeile kopieren müssen, müssen Sie die Formeln über die Verwendung getFormulas()und setFormulas()Funktionen hinweg kopieren . Sie können den Wert firstRowauf 2 ändern , wenn Ihre Tabelle beispielsweise Überschriften enthält.

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
quelle
1
Hallo Denis, meinst du den Beitrag, den ich erstellt habe? Ich überprüfe gerade das Skript und es arbeitet noch. Grüße Jacob Jan
Jacob Jan Tuinstra
Hi @JacobJanTuinstra, ja du hast recht. Ich habe tatsächlich versucht, eine neue Zeile oben hinzuzufügen und die Formel aus derselben Zeile beizubehalten, und es hat nicht funktioniert, weil das Skript versucht hat, Daten aus einer neu erstellten leeren Zeile zu kopieren. Ich werde meine Antwort aktualisieren, um dies widerzuspiegeln. Vielen Dank
dgpro
Hi @DenGordo! Danke dafür. Wie würde ich das ändern, wenn ich nur Werte verschieben müsste und keine Formeln? Vielen Dank!
Drewdavid
Oh PS - Wo verweise ich auf die Registerkarte, mit der ich zu tun habe? Danke noch einmal.
Drewdavid
-2

Um dieses Problem zu lösen, habe ich setFormula(range)zum Beispiel verwendet:

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

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

Ihre Formel wird entsprechend dem Zeilenindex automatisch vergrößert.

Zuletzt können Sie einen onUpdate- oder einen onEdit-Trigger hinzufügen.

user70790
quelle
-1; Wie wird der Code aufgerufen? Sie addieren eine Summe, müssen jedoch physisch eine Zeile hinzufügen. Der onUpdateTrigger existiert nicht.
Jacob Jan Tuinstra