es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Copie y pegue los valores sin duplicados en las hojas de cálculo.

Quiero copiar y pegar solo los valores (no las fórmulas) desde el rango de origen al objetivo sin duplicados (algunos valores que ya se encuentran en el rango objetivo). Intenté seguir un par de tutoriales en línea para comenzar con la parte de copiar y pegar (ni siquiera la condición única) pero sigo obteniendo el error “los parámetros (cadena, número, número, número) no coinciden con la firma del método para SpreadsheetApp.Spreadsheet.getRange …”. Realmente no sé por qué, ya que estoy usando el mismo código. También intenté algo con copyTo en lugar de setValues pero obtengo el mismo error.

function paste() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var source = spreadsheet.getDataRange();
  var sourceValues = source.getValues();

  var rowCount = sourceValues.length;
  var columnCount = sourceValues[0].length;

  var target = spreadsheet.getRange(1,4, rowCount, columnCount);
  target.setValues(sourceValues);
}

Aquí tienes una hoja de cálculo de muestra de lo que me gustaría obtener. Sé que sería más fácil con una fórmula, pero el problema es que mis datos en Origen son dinámicos porque provienen de un ImportXML, por lo que a veces los datos extraídos simplemente desaparecen, razón por la cual quiero pegar solo los valores cuando los obtengo antes de que desaparezcan.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para copiar y pegar solo los valores (no las fórmulas) desde el rango de origen al objetivo sin duplicados, puedes modificar el código para usar el método setValues() con un bucle a través de los valores de origen para verificar los duplicados en el rango objetivo. Aquí tienes un ejemplo de código:

    function copiarValoresSinDuplicados() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var origen = ss.getSheetByName('Origen');
      var objetivo = ss.getSheetByName('Objetivo');
    
      var valoresOrigen = origen.getDataRange().getValues();
      var valoresObjetivo = objetivo.getDataRange().getValues();
    
      var valoresObjetivoPlano = valoresObjetivo.flat(); // convierte en un array 1D para verificar duplicados
    
      // bucle a través de los valores de origen y copia solo los no duplicados
      var nuevosValores = [];
      for (var i = 0; i < valoresOrigen.length; i++) {
        var fila = valoresOrigen[i];
        var nuevaFila = [];
        for (var j = 0; j < fila.length; j++) {
          var valor = fila[j];
          if (valoresObjetivoPlano.indexOf(valor) === -1) { // verifica duplicados
            nuevaFila.push(valor);
          }
        }
        nuevosValores.push(nuevaFila);
      }
    
      // pega los valores en el rango objetivo
      var ultimaFila = objetivo.getLastRow(); // obtén la última fila de datos existentes en el rango objetivo
      objetivo.getRange(ultimaFila+1, 1, nuevosValores.length, nuevosValores[0].length).setValues(nuevosValores);
    }
    

    Este código primero obtiene las hojas de origen y objetivo, y sus rangos de datos como arrays 2D. Luego, convierte los valores objetivo a un array plano 1D para verificar duplicados.

    A continuación, el código realiza un bucle a través de los valores de origen y verifica cada valor en busca de duplicados utilizando indexOf(). Si un valor no es un duplicado, se agrega a una nueva fila que luego se agrega a un nuevo array 2D llamado nuevosValores.

    Finalmente, el código obtiene la última fila de datos existentes en el rango objetivo utilizando getLastRow(), y pega los nuevos valores en la siguiente fila utilizando getRange() y setValues().

    Puedes utilizar este código y modificarlo según tus necesidades específicas.

Comments are closed.