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.

Google Apps Script para encontrar y actualizar filas en una hoja de destino mediante un ID único y agregar filas únicas si el ID único no está en la hoja de destino.

¡Buen día a todos! Tengo estos códigos que quiero combinar en uno, pero tengo problemas para hacerlo.

Este es el primer código en el que se copian los datos de la hoja de origen a la hoja de destino, se agregan después de la última fila con datos.

function DE() {
  let spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // activa el documento abierto
  let sourceSheet = spreadSheet.getSheetByName('Support Sheet'); // selecciona la hoja de la que provendrán los datos
  let sourceSheet2 = spreadSheet.getSheetByName('Data Entry'); // selecciona la hoja en la que se encuentra el nombre de la hoja

  let sourceRange = sourceSheet.getDataRange(); 
  let sourceRange2 = sourceSheet2.getDataRange();
  let sourceValues = sourceRange.getValues();
  let sourceValues2 = sourceRange2.getValues();
  let sheetName = sourceValues2[1][1];
  sourceValues = sourceValues.slice(1).map(row => row.slice(13,13+10));

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

  let targetSheet = spreadSheet.getSheetByName(sheetName);

  let lastRow = targetSheet.getLastRow() + 1;

  let targetRange = targetSheet.getRange(lastRow,1,rowCount,columnCount);

  targetRange.setValues(sourceValues);
}

Y este es el código que vi aquí y que funciona perfectamente en mi hoja de cálculo, donde este actualiza la columna B si hay cambios basados en el identificador único (columna A).

function updateEntrees() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName('Support Sheet');
  var rg1a=sh1.getRange(2,1,sh1.getLastRow()-1,1);
  var vA1a=rg1a.getValues();
  var rg1b=sh1.getRange(2,2,sh1.getLastRow()-1,1);
  var vA1b=rg1b.getValues();
  var sh2=ss.getSheetByName('Target Sheet');
  var rg2a=sh2.getRange(2,1,sh2.getLastRow()-1,1);
  var vA2a=rg2a.getValues();
  var rg2b=sh2.getRange(2,2,sh2.getLastRow()-1,1);
  var vA2b=rg2b.getValues();
  for(var i=0;i<va1a.length;i++) {="" for(var="" j=""></va1a.length;i++)><va2a.length;j++) {
      if(va1a[i][0]==va2a[j][0]) {
        va2b[j][0]=va1b[i][0]
      }
    }
  }
  rg2b.setvalues(va2b);
}

ahora me pregunto cómo voy a combinar estos dos, donde si la hoja de origen tiene un identificador único que necesita actualización, actualizará la hoja de destino y si hay un nuevo identificador único, simplemente agregará los datos al final. {=”” if(va1a[i][0]=”=vA2a[j][0])” {=”” va2b[j][0]=”vA1b[i][0]” }=”” }=”” }=”” rg2b.setvalues(va2b);=”” }=”” ="" ahora="" me="" pregunto="" cómo="" voy="" a="" combinar="" estos="" dos,="" donde="" si="" la="" hoja="" de="" origen="" tiene="" un="" identificador="" único="" que="" necesita="" actualización,="" actualizará="" la="" hoja="" de="" destino="" y="" si="" hay="" un="" nuevo="" identificador="" único,="" simplemente="" agregará="" los="" datos="" al=""></va2a.length;j++) {
if(va1a[i][0]==va2a[j][0]) {
va2b[j][0]=va1b[i][0]
}
}
}
rg2b.setvalues(va2b);
}

ahora me pregunto cómo voy a combinar estos dos, donde si la hoja de origen tiene un identificador único que necesita actualización, actualizará la hoja de destino y si hay un nuevo identificador único, simplemente agregará los datos al final.>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¿Alguien puede ayudarme con esto?

    Sí, es posible combinar los dos códigos que proporcionaste. El siguiente código debería hacer el trabajo:

    function combine() {
      let spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // activa el documento abierto
      let sourceSheet = spreadSheet.getSheetByName('Support Sheet'); // selecciona la hoja de donde vendrán los datos
      let sourceSheet2 = spreadSheet.getSheetByName('Data Entry'); // selecciona la hoja donde el nombre de la hoja contiene
    
      let sourceRange = sourceSheet.getDataRange(); 
      let sourceRange2 = sourceSheet2.getDataRange();
      let sourceValues = sourceRange.getValues();
      let sourceValues2 = sourceRange2.getValues();
      let sheetName = sourceValues2[1][1];
      sourceValues = sourceValues.slice(1).map(row => row.slice(13,13+10));
    
      let rowCount = sourceValues.length;
      let columnCount = sourceValues[0].length;
    
      let targetSheet = spreadSheet.getSheetByName(sheetName);
    
      let lastRow = targetSheet.getLastRow() + 1;
    
      let targetRange = targetSheet.getRange(lastRow,1,rowCount,columnCount);
    
      targetRange.setValues(sourceValues);
    
      var rg1a=sourceSheet.getRange(2,1,sourceSheet.getLastRow()-1,1);
      var vA1a=rg1a.getValues();
      var rg1b=sourceSheet.getRange(2,2,sourceSheet.getLastRow()-1,1);
      var vA1b=rg1b.getValues();
      var rg2a=targetSheet.getRange(2,1,targetSheet.getLastRow()-1,1);
      var vA2a=rg2a.getValues();
      var rg2b=targetSheet.getRange(2,2,targetSheet.getLastRow()-1,1);
      var vA2b=rg2b.getValues();
      for(var i=0;i<vA1a.length;i++) {
        for(var j=0;j<vA2a.length;j++) {
          if(vA1a[i][0]==vA2a[j][0]) {
            vA2b[j][0]=vA1b[i][0]
          }
        }
      }
      rg2b.setValues(vA2b);
    }
    

Comments are closed.