Copiar hoja Origen a Hoja Destino

67 views
Skip to first unread message
Assigned to sistemainteg...@gmail.com by me

Cpro Sistema

unread,
Apr 4, 2024, 12:13:57 PM4/4/24
to Apps Script en Español
Hola Sres su ayuda con esta Informacion

tengo el archivo Origen donde tengo una hoja desde donde Filtro informacion por Cuenta Contable anexo estructura


30/06/2021
613101Sueldos y Salarios - Venta


Codigo
FechaReferenciaDescripcionSaldo

613101
15/01/2021112-6-981 Registro 122  1.80

613101
31/01/2021113-98-987RecNóm:987 0.60


Lo que requeria es que una vez que filtro corra el script y esa informacion filtrada la copie a otro archivo Destino en una hoja nueva si no existe la cuenta con el nombre de la cuenta filtrada.
del archivo origen Celda E3 tomo el nombre que va a tener la hoja en el archivo destino, hasta aqui funciona bien
Anexo el codigo

function crearAnalisisNuevoGS4(){
  const libroOrigen = SpreadsheetApp.getActiveSpreadsheet();
  const hojaOrigen = libroOrigen.getSheetByName("Mayor");
  const nombreMayor = hojaOrigen.getRange('E3').getValue();
  const libroDestino= SpreadsheetApp.openById("1N5JHxnkU2LZRUmGfUHE80JRguQfmzWJDJG-E8W5w-5E");

  if (existeHoja(libroDestino, nombreMayor)) {
    var respuesta = Browser.msgBox("La hoja " + nombreMayor + " ya existe en el libro destino. ¿Desea copiar la data al final de la hoja?");
    if (respuesta === "Sí") {
      const hojaDestino = libroDestino.getSheetByName(nombreMayor);
      const ultimaFilaOrigen = hojaOrigen.getLastRow();
      const ultimaFilaDestino = hojaDestino.getLastRow() || 0;
      const ultimaFila = Math.max(ultimaFilaOrigen, ultimaFilaDestino);
      const rangoOrigen = hojaOrigen.getRange(1, 1, ultimaFilaOrigen, 6).getValues();
      const rangoDestino = hojaDestino.getRange(ultimaFila + 1, 1, ultimaFilaOrigen, 6);
      rangoDestino.setValues(rangoOrigen);
    }
  } else {
    const newSheet = libroDestino.insertSheet();
    newSheet.setName(nombreMayor);
    const hojaDestino = libroDestino.getSheetByName(nombreMayor);
    const rangoOrigen = hojaOrigen.getRange(1, 1, hojaOrigen.getLastRow(), 6).getValues();
    const rangoDestino = hojaDestino.getRange(1, 1, hojaOrigen.getLastRow(), 6);
    rangoDestino.setValues(rangoOrigen);
  }
} 
function existeHoja(libro, nombreHoja) {
  const hojas = libro.getSheets();
  for (var i = 0; i < hojas.length; i++) {
    if (hojas[i].getName() === nombreHoja) {
      return true;
    }
  }
  return false;
}
En el caso que la hoja existe en el libro destino debera copiar los datos en la ultima fila disponible no me esta copiando los datos cuando la hoja ya existe hice la prueba borrando los datos  y nos los esta copiando (sin borra la hoja).

Su ayuda que debo modificar
Gracias

Cpro Sistema

unread,
Apr 4, 2024, 1:35:38 PM4/4/24
to Apps Script en Español
Corregi el codigo porque la copia que hacia era de todo el rango de la hoja cuando la hoja existia y deberia ser solo el rango de la data que empieza en b6 y termina en F + ultima fila; pero continua sin copiar la data
function crearAnalisisNuevoGS4(){
  // Obtenemos el libro y la hoja de origen
  const libroOrigen = SpreadsheetApp.getActiveSpreadsheet();
  const hojaOrigen = libroOrigen.getSheetByName("Mayor");

  // Obtenemos el nombre de la hoja que queremos copiar
  const nombreMayor = hojaOrigen.getRange('E3').getValue();

  // Abrimos el libro destino
  const libroDestino= SpreadsheetApp.openById("1N5JHxnkU2LZRUmGfUHE80JRguQfmzWJDJG-E8W5w-5E");

  // Si la hoja ya existe
  if (existeHoja(libroDestino, nombreMayor)) {
    // Preguntamos al usuario si desea copiar la data al final de la hoja
    var respuesta = Browser.msgBox("La hoja " + nombreMayor + " ya existe en el libro destino. ¿Desea copiar la data al final de la hoja?");
    if (respuesta === "Sí") {
      // Obtenemos la hoja destino
      const hojaDestino = libroDestino.getSheetByName(nombreMayor);

      // Obtenemos la última fila de la hoja origen y destino
      const ultimaFilaOrigen = hojaOrigen.getLastRow();
      const ultimaFilaDestino = hojaDestino.getLastRow() || 0;

      // Calculamos la última fila a copiar
      const ultimaFila = Math.max(ultimaFilaOrigen, ultimaFilaDestino);

      // Definimos el rango de origen y destino
      const rangoOrigen = hojaOrigen.getRange('B6', ultimaFila, 6, 1).getValues(); // Desde B6 hasta la última fila de la columna F
      const rangoDestino = hojaDestino.getRange(ultimaFila + 1, 2, ultimaFilaOrigen - 5, 1); // Se copia desde la fila siguiente a la última

      // Copiamos los valores al rango destino
      rangoDestino.setValues(rangoOrigen);
    }
  } else {
    // Si la hoja no existe, la creamos y copiamos el rango
    const newSheet = libroDestino.insertSheet();
    newSheet.setName(nombreMayor);
    const hojaDestino = libroDestino.getSheetByName(nombreMayor);
    const rangoOrigen = hojaOrigen.getRange('B6', ultimaFilaOrigen, 6, 1).getValues();
    const rangoDestino = hojaDestino.getRange('B6', ultimaFilaOrigen, 6, 1);
    rangoDestino.setValues(rangoOrigen);
  }
  SpreadsheetApp.getUi().alert('Analisis generado Satisfactoriamente');
}

Omar Raygoza

unread,
Apr 4, 2024, 7:31:38 PM4/4/24
to Apps Script en Español
Utiliza el Debuger o la consola para ver si está copiando los datos.
Checa en la consola con un Logger o un Console, depende de lo que necesites.
Checa y nos avisas el resultado.

Freddy Moreno

unread,
May 16, 2024, 11:28:14 PM5/16/24
to Apps Script en Español
Su ayuda como se hace eso consulta????
Reply all
Reply to author
Forward
0 new messages