lunes, 28 de octubre de 2024

Bordes Tabla

 function bordesTabla() {

  var hojaActiva = SpreadsheetApp.getActiveSpreadsheet();
  var formulario = hojaActiva.getSheetByName("FILTRO"); // Nombre de hoja del formulario
 
   // Obtener la última fila con datos en la columna D
  var UltFilaColumnaA = formulario.getRange("D:D").getValues().filter(String).length;
   
   
  var valorCeldaD8 = formulario.getRange("D8").getValue();
 
  // Verificar si D8 no está vacío
  if (valorCeldaD8 !== "") {
    var rangoBordes = formulario.getRange(8, 4, UltFilaColumnaA+500, 9); // Rango a limpiar
    rangoBordes.setBorder(false, false, false, false, false, false); // Eliminar bordes  
// Obtener el valor de la celda D8
   
    // Aplicar bordes a todo el rango desde D8 hasta la última fila utilizada en las columnas
A hasta I
    var rangoCompleto = formulario.getRange(8, 4, UltFilaColumnaA-3, 9); // Cambié el
rango a D8:I
    rangoCompleto.setBorder(true, true, true, true, true, true, '#000000',
SpreadsheetApp.BorderStyle.SOLID);
  }
}

function bordesTabla1() {
var hojaActiva = SpreadsheetApp.getActiveSpreadsheet();
  var formulario = hojaActiva.getSheetByName("DNI");
// Obtener todos los DNIs de la columna A
    var datosA = formulario.getRange("A2:A").getValues().flat();
   
    // Filtrar DNIs vacíos
    var dnIsFiltrados = datosA.filter(String);
// Aplicar bordes a todo el rango A2:C (hasta la última fila usada)
    if (dnIsFiltrados.length > 0) {
      formulario.getRange(2, 1, dnIsFiltrados.length, 3)
.setBorder(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID);
    }
}

Ultima Fila


/** Contratas */

function UltimaFilaContratas() {
  var LibroHoja = SpreadsheetApp.getActive().getSheetByName("Hoja 5");
  var UltimaFila = LibroHoja.getLastRow()+1;
  Logger.log(UltimaFila);
}

function GrabarContratas() {
  var spreadsheet = SpreadsheetApp.getActive();
}

//Buscar
var NUM_COLUMNA_BUSQUEDA = 0;
function Buscar() {

  var hojaActiva = SpreadsheetApp.getActiveSpreadsheet();
  var formulario = hojaActiva.getSheetByName("Formulario"); // Nombre de la hoja del formulario
  var DatosC = hojaActiva.getSheetByName("NOVIEMBRE 2022"); // Nombre de la hoja de Datos
  var UltimaFila = DatosC.getLastRow()+1; //Ultima fila Noviembre 2022
  var valor = formulario.getRange("D4").getValue();
  var valores = hojaActiva.getSheetByName("Datos").getDataRange().getValues();

  // Nombre de hoja donde se almacenan datos
  for (var i = 0; i < valores.length; i++) {
    var fila = valores[i];

    if (fila[NUM_COLUMNA_BUSQUEDA] == valor) {

      formulario.getRange("D7").setValue(fila[2]);
      formulario.getRange("F7").setValue(fila[1]);
      formulario.getRange("B4").setValue(UltimaFila);

    }
  }

}


 f//function onEdit() {

//CopiarCeldas()
//}

function CopiarCeldas() {
  var columna = "F";
  var hojaActiva = SpreadsheetApp.getActiveSpreadsheet();
  var ocurrencia = hojaActiva.getSheetByName("OCURRENCIAS");
  var maximoFilas = ocurrencia.getMaxRows();
  //F1:F1000
 
  valores = ocurrencia.getRange(columna+"1:"+columna+maximoFilas).getValues();
  for(;valores[maximoFilas-1]=="" && maximoFilas>0;maximoFilas--){}
  //Logger.log(maximoFilas)
 
  const celdaActiva = hojaActiva.getActiveCell();
  const nombreHojaActiva = celdaActiva.getSheet().getName();
  const filaCeldaActiva = celdaActiva.getRow();

  if (filaCeldaActiva == maximoFilas && nombreHojaActiva == "OCURRENCIAS") {
    const ocu4 = "Atendido"
    const ocu5 = "BAJO"
    const ocu17 = "Se realizó el RIS, se reportó al Supervisor Liderman Anibal Begazo Cáceres y se derivó a la Oficina de Seguridad."
    const ocu18 = "Seguridad Liderman"
    const ocu19 = "Aníbal Begazo"
    //const ocu20 = celdaActiva
    const ocu21 = "No aplica"
    const ocu22 = "0"
    const ocu23 = "Tirado Alvarez César Rolando"


    ocurrencia.getRange(maximoFilas, 4).setValue(ocu4)
    ocurrencia.getRange(maximoFilas, 5).setValue(ocu5)
    ocurrencia.getRange(maximoFilas, 17).setValue(ocu17)
    ocurrencia.getRange(maximoFilas, 18).setValue(ocu18)
    ocurrencia.getRange(maximoFilas, 19).setValue(ocu19)
    ocurrencia.getRange(maximoFilas, 20).setValue(ocurrencia.getRange(maximoFilas, 6).getValue());
    ocurrencia.getRange(maximoFilas, 21).setValue(ocu21)
    ocurrencia.getRange(maximoFilas, 22).setValue(ocu22)
    ocurrencia.getRange(maximoFilas, 23).setValue(ocu23)
  }
}

Obtener Rango

 //Con este código obtenemos el rango de la celda que está en la posicion columna=1 y fila=1

(empieza desde 1, no desde 0), es decir, obtendrá el rango de la celda A1.



//Si os resulta más fácil, se podría hacer un poco diferente para que fuera más claro como
obtener el rango en lo que se llama "notación A1"

function GetCellRange()
{
   var range  = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1");  
   Logger.log(range.getValue());
}

//Lo hagas como lo hagas, esta forma de obtener rangos es básico para hacer lecturas y
escrituras en un spreadsheet con Google Apps Script


//2. Obtener rango de una fila en concreto
function GetRow()
{
   var sheet  = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   var range  = sheet.getRange(1, 1, 1, sheet.getLastColumn() );
   Logger.log(range.getValues());
}

//Todo lo que hacemos es pedir al spreadsheet el rango de alto 1 celda y ancho tanto como
datos tenga la hoja de cálculo.


//Usualmente no se usa esta forma para leer filas, sino que se usa lo que explicaré en el
punto 5 a fin de después ir leyendo todas las lineas que nos interesan.


//3. Obtener rango de una columna en concreto
//Obtener el rango de una columna es algo más sencillo de lo que seria obtener una fila,
si por ejemplo quisiéramos obtener la fila de datos desde la posición  A1 de tres elementos
deberíamos hacer algo de este estilo:
function GetColumnRange()
{
   var range  = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1, 3);
   Logger.log(range.getValues());
}


//Si quisiéramos obtener la columna entera solo deberíamos hacer un pequeño cambio en
el código:


function GetColumnRange()
{
   var sheet  = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   var range  = sheet.getRange(1, 1, sheet.getLastRow());
   Logger.log(range.getValues());
}
//De esta forma obtendríamos toda la columna hasta donde la hoja de cálculo tuviera valores.


//4. Obtener rango de una zona en concreto
function GetData()
{
   var range  = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1, 3,4);
   Logger.log(range.getValues());
}
//Con este sencillo código obtendríamos el rango de celdas que estaría comprendido en
la celda A1, con un alto de 3 filas y un ancho de 4 columnas.


//5. Obtener rango de toda la hoja
function GetAll()
{
   var range  = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange();
   Logger.log(range.getValues());
}
//Tengo que reconocer que getDataRange es una de mis funciones preferidas, básicamente
lo que hace es obtener el rango para todas las celdas que haya sido escritas. desde la
posición 1,1 hasta el máximo de columnas y filas que tenga la hoja de cálculo escritas.
Muy útil cuando queremos procesar los datos de forma óptima ya se para hacer la lectura
o escritura óptima dentro de un spreadsheet.




//6. Obtener rango de lo que el usuario ha modificado
function onEdit(e)
{
   var range = e.range;
   Logger.log(range.getValues());
}

//Cuando el usuario modifica algo de una celda, se ejecuta el evento onEdit. Como parámetro,
recibimos la información de lo que se ha modificado y evidentemente, podemos obtener el
rango de dicha información.

//Esta funcionalidad puede ser básica cuando queremos controlar lo que nuestro usuario
introduce o cuando queremos montar un sistema de timestamp ( por poner ejemplos)


//7. Obtener rango de lo que un usuario ha respondido en un formulario
function onFormSubmit(e)
{
   var range = e.range;
   Logger.log(range.getValues());
}

//Si os fijáis es lo mismo que el onEdit pero para el caso de cuando un formulario es
rellenado. La gran diferencia es que generalmente el usuario modificará solo una celda
a la vez mientras que los formularios lo que se modifica es toda una fila de golpe.
En ambos casos el código es el mismo dado que lo que recibimos es un rango en las
dos situaciones.


//8. Obtener rango de lo que otro programa ha modificado en nuestro spreadsheet.
function onChange(e)
{
   var range = e.range;
   Logger.log(range.getValues());
}

//La idea es la misma que con el onEdit o el onFormSubmit pero cuando los cambios
que se producen en el spreadsheet no vienen ni del usuario ni de un formulario,
generalmente, cuando otro software ( en muchas ocasiones Zapier por poner solo un ejemplo )
introduce información en nuestro spreadsheet.

//Se os ocurre alguna otra situación en que sea útil y diferente obtener el rango?

//Quedo abierto a vuestras dudas y sugerencias.

Numeros Consecutivos

function consecutivo() {
  const libro = SpreadsheetApp.getActiveSpreadsheet();
  const hojaDatos = libro.getSheetByName("Registros");
  const uFila = hojaDatos.getLastRow();

  const celdaActiva = libro.getActiveCell();
  const nombreHojaActiva = celdaActiva.getSheet().getName();
  const filaCeldaActiva = celdaActiva.getRow();

  if (filaCeldaActiva == uFila && nombreHojaActiva == "Registros") {
    const consecutivo = hojaDatos.getRange(uFila - 1, 1).getValue() + 1
    hojaDatos.getRange(uFila, 1).setValue(consecutivo)
  }
}

 

Mostrar Formulario Web

function doGet() {
  const html = HtmlService.createTemplateFromFile("moduloBuscar")
  .evaluate();
  return html;
}

function doGet(e) {
   Logger.log( Utilities.jsonStringify(e) );
   //var userProperties = PropertiesService.getUserProperties();
   //var hojaCalculo = SpreadsheetApp.openById("1aZEuhYMBS7sUGtkDlWGdT5tGNrYF4jjAmE_RFkYCBzI");
   //var hojaDatos = hojaCalculo.getSheetByName('Datos');
 
  //CacheService.getUserCache().put('hojaCalculo', JSON.stringify(hojaCalculo));
  //CacheService.getUserCache().put('hojaDatos', JSON.stringify(hojaDatos));
 
   //userProperties.setProperty('hojaCalculo', hojaCalculo);
   //userProperties.setProperty('hojaDatos', hojaDatos);
 
  if (!e.parameter.page) {
    // Cuando no se especifica una página, retorna "Pagina de inicio"
    return HtmlService.createTemplateFromFile('Index').evaluate();
  }
  // sino, usa los parametros recogidos desde el script en un archivo HTML
  var template = HtmlService.createTemplateFromFile(e.parameter.page)
  template.action = ScriptApp.getService().getUrl();
  return template.evaluate();

} 

Condicionales

 /// Condicionales

if(condicion){
	// código a ejecutar si se cumple
}
if(condicion){
	// código a ejecutar si se cumple
} else {
	// código a ejecutar si NO se cumple
}
if(condicion1){
	// código a ejecutar si se cumple la condición 1
} else if (condicion2) {
	// código a ejecutar si se cumple la condición 2
} else {
	// código a ejecutar si no se cumple ninguna de las anteriores
}

Hora

 function Hora() {

  var now = new Date();
  var year = now.getFullYear();
  var month = now.getMonth() + 1;
  var day = now.getUTCDate() - 1;
  var hora = now.getHours();
  var minutos = now.getMinutes();
  var dias_semana = ["sábado", "domingo", "lunes", "martes", "miercoles", "jueves", "viernes"];
  var nombreDia = (dias_semana[now.getUTCDay()]);
  //var nombreDia = now.getUTCDay();
  var string = day + "/" + month + "/" + year + "-" + hora + ":" + minutos + "\n";

  SpreadsheetApp.getUi().prompt(string);

}

EscribirEnUnaCeldaHoja

 function onOpen() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    { name : "Escribir",  functionName : "Escribir"}
   ];
  spreadsheet.addMenu("Lord Pakus Scripts", entries);
};

function Escribir()
{
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
 
  sheet.getRange(1,1).setValue('Hola').setBackground('red');
  sheet.getRange(1,2).setValue('Mundo').setBackground('green');
}

Arreglos

 function calcularVentasArreglos() {

var libro = SpreadsheetApp.getActiveSpreadsheet();
var hoja = libro.getActiveSheet();
for(var fila=2;fila<=hoja.getLastRow();fila++){
//Operaciones a repetir
var precio=hoja.getRange(fila,3).getValue()
var unidades=hoja.getRange(fila,2).getValue() // Leer
var ventas=precio*unidades
hoja.getRange(fila,6).setValue(ventas) //Escribir
}
}

function calcularVentasArreglosDatos() {
var libro = SpreadsheetApp.getActiveSpreadsheet();
var hoja = libro.getActiveSheet();
var arregloDatos=hoja.getDataRange().getValue();
//console.log(arregloDatos)
for(var fila=1;fila<arregloDatos.length;fila++){
var precio=arregloDatos[fila][2]
var unidades=arregloDatos[fila][1]
Logger.log(precio)
Logger.log(unidades)
}
}

function calcularVentasArreglosForEach() {
var libro = SpreadsheetApp.getActiveSpreadsheet();
var hoja = libro.getActiveSheet();
var range = hoja.getDataRange();
var arregloDatos = range.getValues();
//var arregloDatos=hoja.getDataRange().getValue();
arregloDatos.shift();
//console.log(arregloDatos)
var arregloVentas = []
arregloDatos.forEach(fila => {
var precio = fila[2]
var unidades = fila[1]
//Logger.log(precio)
// Logger.log(unidades)
var ventas = precio * unidades
arregloVentas.push([ventas])
})


//Logger.log(arregloVentas)

//hoja.getRange(2, 6, arregloDatos.length - 1).setValues(arregloVentas)
hoja.getRange(2, 6, arregloDatos.length).setValues(arregloVentas)
}

function calcularVentasArreglos() {
var libro = SpreadsheetApp.getActiveSpreadsheet();
var hoja = libro.getActiveSheet();
var range = hoja.getDataRange();
var arregloDatos = range.getValues();
//var arregloDatos=hoja.getDataRange().getValue();
//console.log(arregloDatos)
var arregloVentas = []
for (var fila = 1; fila < arregloDatos.length; fila++) {
var precio = arregloDatos[fila][2]
var unidades = arregloDatos[fila][1]
//Logger.log(precio)
// Logger.log(unidades)
var ventas = precio * unidades
arregloVentas.push([ventas])
}
Logger.log(arregloVentas)
//hoja.getRange(2,6,arregloDatos.length-1).setValue(arregloVentas)
hoja.getRange(2, 6, arregloDatos.length - 1).setValues(arregloVentas)
}

function calcularVentasTradicional() {
var libro = SpreadsheetApp.getActiveSpreadsheet();
var hoja = libro.getActiveSheet();
for (var fila = 2; fila <= hoja.getLastRow(); fila++) {
//Operaciones a repetir
//hoja.getRange(fila,5).setValue("Empresa Runchito") //Escribir
var precio = hoja.getRange(fila, 3).getValue()
var unidades = hoja.getRange(fila, 2).getValue() // Leer
Logger.log(precio)
Logger.log(unidades)
}


domingo, 27 de octubre de 2024

Mostrar Formulario

 function mostrarFormulario() {


  var html = HtmlService.createTemplateFromFile('Index.html').evaluate()
    .setTitle('Acceso')
    .setWidth(450)
    .setHeight(500);
  SpreadsheetApp.getUi().showModelessDialog(html, 'Formulario Contrata');
}
function onOpen() {
  SpreadsheetApp.getUi().createMenu('Contrata')
    .addItem('Formulario Contrata', 'mostrarFormulario')
    .addToUi();
}

onEdit

function onEdit() {

textoMayuscula()

}


function onEdit() {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Formulario");
  var actual = ss.getActiveCell();
  var dir = actual.getA1Notation();

  if (dir == "B1") {

    actual.offset(1, 0).clearContent();
    actual.offset(2, 0).clearContent();
  } else if (dir == "B2") {
    actual.offset(1, 0).clearContent();
  }
}

Texto en Mayusculas

 function textoMayuscula() {

  var hojaActiva = SpreadsheetApp.getActiveSpreadsheet();

  var formulario = hojaActiva.getSheetByName("Formulario");

   

  var celdasAMayuscula = ["D4", "D10", "D13", "F21"]; // Celdas a Mayuscula

  for (var i = 0; i < celdasAMayuscula.length; i++) {

    formulario.getRange(celdasAMayuscula[i]).setValue(formulario.getRange(celdasAMayuscula[i]).getValue().toString().toUpperCase() );

  }

}