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?


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łą


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.


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

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.


-1; Jak wywoływany jest kod? Dodajesz sumę, ale musisz fizycznie dodać wiersz. onUpdateSpust nie istnieje.
Jacob Jan Tuinstra
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.