Jak automatycznie wstawić nowy wiersz i zachować funkcje / formuły z ostatniego wiersza?

24

Mam tabelę z komórkami, które mają funkcje / formuły, takie jak ta:

wprowadź opis zdjęcia tutaj

Potrzebuję skryptu, który tworzy nowy wiersz, kopiując wraz z nim funkcje / formuły ostatnio używanego wiersza. Znajduję ten skrypt, który tworzy nowy wiersz, ale nie kopiuje funkcji / formuł . Jak mogę zaimplementować to zadanie kopiowania formatującego w Google Apps Script bez konieczności ręcznego wybierania i kopiowania?

Uczeń Pythonisty
źródło
jeśli moja poprzednia formuła wiersza to = HTTPResponse (C4), w jaki sposób mogę skopiować tę samą formułę, ale nowy numer komórki dla nowego wiersza?
user1788736,

Odpowiedzi:

20

Użyj poniższego kodu, aby skopiować również formuły jako wartości normalne. Dodaj kod, wybierając Narzędzia z menu arkusza kalkulacyjnego. Następnie wybierz edytor skryptów i dodaj kod. Pamiętaj, aby nacisnąć przycisk „błąd” i uwierzytelnić skrypt.

Kod

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

Uwaga

Ustawienie contentOnly to falsespowoduje uzyskanie standardowej kopii. Ustawienie go truespowoduje wklejenie tylko wartości. Przykładowy skrypt, który znalazłeś, to coś więcej niż wklejanie wartości .....

Przykład

Utworzyłem dla Ciebie przykładowy plik: Dodaj wiersz z formułą

Jacob Jan Tuinstra
źródło
3

Ta ArrayFormula może zrobić to samo bez udziału skryptu. Wpisz go w D4, a zostanie on automatycznie przeniesiony do dowolnej liczby pustych komórek pod nim.

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

Uwagi: „B4: B” oznacza, spójrz na wszystkie komórki od B4 do końca kolumny.

Podczas gdy ArrayFormula dba o kopiowanie się do komórek pod nim. Upewnij się tylko, że komórki pod nim są puste.

użytkownik 3660579
źródło
3

W przypadku, gdy musisz dodać nowy wiersz na górze (pierwszy wiersz) i skopiować formułę z pierwszego górnego wiersza, musisz skopiować formuły za pomocą funkcji getFormulas()i setFormulas(). Możesz zmienić wartość firstRowna 2, jeśli arkusz kalkulacyjny ma na przykład nagłówki.

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
źródło
1
Cześć Denis, Czy masz na myśli post, który stworzyłem? Właśnie sprawdzam skrypt i nadal działa. Pozdrawiam Jacob Jan
Jacob Jan Tuinstra
Cześć @JacobJanTuinstra, tak, masz rację. W rzeczywistości próbowałem dodać nowy wiersz na górze i zachować formułę z tego samego wiersza i to nie zadziałało, ponieważ skrypt próbował skopiować dane z nowo utworzonego pustego wiersza. Zaktualizuję moją odpowiedź, aby to odzwierciedlić. Dziękuję
dgpro,
Cześć @DenGordo! Dzięki za to. Jak zmodyfikowałbym to, jeśli mam tylko wartości do przeniesienia, a nie formuły? Dzięki!
Drewdavid
Oh PS - Gdzie mogę znaleźć odniesienie do karty, z którą mam do czynienia? Dzięki jeszcze raz.
Drewdavid
-2

Aby rozwiązać ten problem, wykorzystałem setFormula(range)na przykład:

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

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

Twoja formuła automatycznie wzrośnie zgodnie z indeksem wiersza.

Na koniec możesz dodać wyzwalacz onUpdate lub onEdit.

użytkownik70790
źródło
-1; Jak wywoływany jest kod? Dodajesz sumę, ale musisz fizycznie dodać wiersz. onUpdateSpust nie istnieje.
Jacob Jan Tuinstra