/**
* Copia en la fila nueva el formato y validaciones de la fila maestra, es decir,
* la cabecera si index = 1 o la que prefiramos, si no expecificamos index, cuando
* insertamos al final coge de maestra la anterior y al principo coge la siguiente.
* @example function onEdit() { updateRules(); }
**/
function sheetRowRules(index)
{
var spread = SpreadsheetApp.getActive();
var sheet = SpreadsheetApp.getActiveSheet();
var row = sheet.getActiveCell().getRowIndex();
var cols = sheet.getMaxColumns();
if (index)
var i = index;
else if (row > 2)
var i = row-1; // anterior
else
var i = row+1; // siguiente a la cabecera
var rg = sheet.getRange(i, 1, 1, cols);
var rango = sheet.getRange(row, 1, 1, cols);
// Copia el formato del anterior registro al actual y fórmulas de celdas para conservar validaciones de datos
rg.copyTo(rango, {formatOnly:true});
var formulas = rg.getFormulasR1C1().toString().split(",");
//rango.setFormulasR1C1(formulas); // borra los valores, por eso así:
for (var n = 0; n < formulas.length; i++)
{
if (formulas[n].length)
{
var col = n+1;
var rango = sheet.getRange(row, col, 1, 1);
rango.setFormulaR1C1(formulas[n]);
}
}
spread.toast("Formatos y fórmulas del replicados de "+i+" al registro "+row);
}