Come inserire automaticamente una nuova riga e conservare funzioni / formule dall'ultima riga?


24

Ho una tabella con celle che hanno funzioni / formule, come questa:

inserisci qui la descrizione dell'immagine

Ho bisogno di uno script che crei una nuova riga, copiando con essa le funzioni / le formule dell'ultima riga utilizzata. Trovo questo script che crea una nuova riga ma non copia funzioni / formule . Come posso implementare questa attività di copia della formattazione in Google Apps Script senza dover selezionare e copiare manualmente?


se la mia formula di riga precedente è = HTTPResponse (C4) come posso copiare la stessa formula ma il nuovo numero di cella per la nuova riga?
user1788736,

Risposte:


20

Usa il codice qui sotto per copiare anche le formule come valori normali. Aggiungi il codice selezionando Strumenti dal menu del foglio di calcolo. Quindi selezionare l'editor di script e aggiungere il codice. Assicurati di premere il pulsante "bug" e autenticare lo script.

Codice

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

osservazione

L'impostazione del contenuto Solo su falseprodurrà una copia standard. Impostandolo su true, verranno incollati solo i valori. Lo script di esempio che hai trovato, fa molto di più che incollare valori .....

Esempio

Ho creato un file di esempio per te: Aggiungi riga con formula


3

Questo ArrayFormula può fare lo stesso senza coinvolgere uno script. Inseriscilo in D4 e verrà riportato automaticamente in qualsiasi quantità di celle vuote sottostanti.

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

Note: "B4: B" significa, guarda tutte le celle a partire da B4 fino alla fine della colonna.

Mentre ArrayFormula si occupa di copiarsi nelle celle sottostanti. Assicurati solo che le celle sottostanti siano vuote.


3

Nel caso in cui sia necessario aggiungere una nuova riga in alto (prima riga) e copiare la formula dalla prima riga in alto, sarà necessario copiare le formule utilizzando getFormulas()e le setFormulas()funzioni. Ad esempio, puoi modificare il valore di firstRow2 se il foglio di calcolo ha intestazioni.

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
Ciao Denis, ti riferisci al post che ho creato? Controllo solo lo script e funziona ancora. Saluti Jacob Jan
Jacob Jan Tuinstra,

Ciao @JacobJanTuinstra, sì hai ragione. In realtà stavo cercando di aggiungere una nuova riga in cima e mantenere la formula dalla stessa riga e non ha funzionato perché lo script stava cercando di copiare i dati dalla riga vuota appena creata. Aggiornerò la mia risposta per riflettere questo. Grazie
dgpro il

Ciao @DenGordo! Grazie per questo. Come potrei modificarlo se avessi solo dei valori da spostare e non anche le formule? Grazie!
Drewdavid,

Oh PS - Dove posso fare riferimento a quale scheda ho a che fare? Grazie ancora.
Drewdavid,

-2

Per risolvere questo problema ho usato setFormula(range), ad esempio:

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

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

La formula aumenterà automaticamente in base all'indice di riga.

Infine è possibile aggiungere un trigger onUpdate o onEdit.


-1; Come viene evocato il codice? Stai aggiungendo una somma, ma devi aggiungere una riga fisicamente. Il onUpdategrilletto non esiste.
Jacob Jan Tuinstra,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.