¿Cómo insertar automáticamente una nueva fila y retener funciones / fórmulas de la última fila?


24

Tengo una tabla con celdas que tienen funciones / fórmulas, como esta:

ingrese la descripción de la imagen aquí

Necesito un script que cree una nueva fila, copiando con él las funciones / fórmulas de la última fila utilizada. Encuentro este script que crea una nueva fila pero no copia funciones / fórmulas . ¿Cómo podría implementar esta tarea de copia de formateo en Google Apps Script sin tener que seleccionar y copiar manualmente?


si mi fórmula de fila anterior es = HTTPResponse (C4), ¿cómo puedo copiar la misma fórmula pero el nuevo número de celda para la nueva fila?
user1788736

Respuestas:


20

Use el siguiente código para copiar también las fórmulas como valores normales. Agregue el código seleccionando Herramientas en el menú de la hoja de cálculo. Luego seleccione editor de script y agregue el código. Asegúrese de presionar el botón "error" y autenticar el script.

Código

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

Observación

Establecer el contenido Solo para falseproducirá una copia estándar. Al configurarlo true, pegará solo los valores. El script de ejemplo que encontraste hace mucho más que pegar valores .....

Ejemplo

He creado un archivo de ejemplo para usted: Agregar fila con fórmulas


3

Este ArrayFormula puede hacer lo mismo sin involucrar un script. Ingrese en D4, y se transferirá automáticamente en cualquier cantidad de celdas vacías debajo de él.

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

Notas: "B4: B" significa, mira todas las celdas comenzando desde B4 hasta el final de la columna.

Mientras, ArrayFormula se encarga de copiarse en las celdas debajo de él. Solo asegúrate de que las celdas debajo estén vacías.


3

En caso de que necesite agregar una nueva fila en la parte superior (primera fila) y copiar la fórmula desde la primera fila superior, deberá copiar las fórmulas mediante el uso de getFormulas()y las setFormulas()funciones. Puede cambiar el valor de firstRowa 2 si su hoja de cálculo tiene encabezados, por ejemplo.

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
Hola Denis, ¿te refieres a la publicación que creé? Solo reviso el script y todavía funciona. Saludos Jacob Jan
Jacob Jan Tuinstra

Hola @JacobJanTuinstra, sí, tienes razón. Realmente estaba tratando de agregar una nueva fila en la parte superior y retener la fórmula de la misma fila y no funcionó porque el script estaba tratando de copiar datos de una fila vacía recién creada. Actualizaré mi respuesta para reflejar esto. Gracias
dgpro

Hola @DenGordo! Gracias por esto. ¿Cómo modificaría esto si solo tengo valores para mover, y no fórmulas también? ¡Gracias!
Drewdavid

Oh PD: ¿Dónde hago referencia a la pestaña con la que estoy tratando? Gracias de nuevo.
Drewdavid

-2

Para resolver este problema, he usado setFormula(range), por ejemplo:

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

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

Su fórmula aumentará automáticamente de acuerdo con el índice de la fila.

Por último, puede agregar un activador onUpdate o onEdit.


-1; ¿Cómo se evoca el código? Estás agregando una suma, pero necesitas agregar una fila físicamente. El onUpdatedisparador no existe.
Jacob Jan Tuinstra
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.