Establecer valor primera columna en fila si id coincide en array

Estoy tratando de establecer las casillas de verificación en un rango. El array firebase_id debe coincidir con la columna B del rango. ¿Si coincide? Fijar fila a TRUE. Pero tengo algunos checboxxs comprobados al azar ..

¿Qué estoy haciendo mal?

function setCheckboxIfValueKinguinIdExist() {
      const AS = SpreadsheetApp.getActiveSpreadsheet();
      const SHEET_TESTING = AS.getSheetByName("Testing");
      
      let get_firebase_items = getSelectedIdsFromFirebase();
      let firebase_ids = get_firebase_items.map(function(item){return item.kinguinId}); // [ '17','2962','9798']
      let last_row = SHEET_TESTING.getLastRow();
     
       
      let values = SHEET_TESTING.getRange("A2:B"+last_row).getValues();
      let row = 1; 
      for(let a in values) {
        let item = values[a][1];

        if(firebase_ids.includes(item) === true){
           SHEET_TESTING.getRange(row,1).setValue("TRUE");
        }   
     
        row++;
      }
    }

Pregunta hecha hace 3 años, 4 meses, 28 días - Por devdoodle


3 Respuestas:

  • Prueba esto:

    function setCheckboxIfValueKinguinIdExist() {
      const AS = SpreadsheetApp.getActiveSpreadsheet();
      const SHEET_TESTING = AS.getSheetByName("Testing");
      let get_firebase_items = getSelectedIdsFromFirebase();
      let firebase_ids = get_firebase_items.map(function(item){return item.kinguinId}); // [ '17','2962','9798']
      var last_row = SHEET_TESTING.getLastRow();
      var values = SHEET_TESTING.getRange("A2:B"+last_row).getValues();
      var row = 1; 
      values.forEach((r,i)=>{
          if(firebase_ids.includes(r[1])) {
          SHEET_TESTING.getRange(i+2,1).setValue("TRUE");
        }   
      });
    }
    

    Respondida el Dec 17, 2020 a las 15:28 - por pixelpioneer

    Votos positivos: 0 | Votos negativos: 0

  • El problema en tu código parece ser que estás estableciendo la fila con la casilla de verificación en "TRUE" basándote en el valor de row, que se incrementa en cada iteración del bucle, pero no estás usando correctamente el valor de row cuando seleccionas la fila para establecer el valor.

    La función getRange() espera que los índices de fila y columna comiencen en 1, por lo que debes sumar 1 al índice de fila que estás utilizando al llamar a getRange().

    Aquí está la corrección:

    javascript
    function setCheckboxIfValueKinguinIdExist() {
        const AS = SpreadsheetApp.getActiveSpreadsheet();
        const SHEET_TESTING = AS.getSheetByName("Testing");
    
        let get_firebase_items = getSelectedIdsFromFirebase();
        let firebase_ids = get_firebase_items.map(function(item){return item.kinguinId}); // [ '17','2962','9798']
        let last_row = SHEET_TESTING.getLastRow();
    
        let values = SHEET_TESTING.getRange("A2:B"+last_row).getValues();
    
        for(let a in values) {
            let item = values[a][1];
    
            if(firebase_ids.includes(item) === true){
               let row = parseInt(a) + 2; // Sumar 2 para ajustar el índice de fila
               SHEET_TESTING.getRange(row,1).setValue("TRUE");
            }
        }
    }
    

    En este caso, sumamos 2 al valor de a para ajustar el índice de fila al seleccionar la fila correspondiente en la hoja de cálculo.

    Espero que esta corrección te ayude a resolver tu problema. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 18, 2020 a las 15:27 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema con tu código es que no estás actualizando correctamente el valor de la primera columna cuando se encuentra una coincidencia en el array firebase_ids. Debes usar el método setValue() para establecer el valor de la celda, no getRange() como estás haciendo actualmente.

    Aquí tienes el código corregido:

    
    function setCheckboxIfValueKinguinIdExist() {
      const AS = SpreadsheetApp.getActiveSpreadsheet();
      const SHEET_TESTING = AS.getSheetByName("Testing");
    
      let get_firebase_items = getSelectedIdsFromFirebase();
      let firebase_ids = get_firebase_items.map(function(item){return item.kinguinId}); // [ '17','2962','9798']
      let last_row = SHEET_TESTING.getLastRow();
    
      let values = SHEET_TESTING.getRange("A2:B"+last_row).getValues();
      let row = 1; 
      for(let a in values) {
        let item = values[a][1];
    
        if(firebase_ids.includes(item) === true){
           SHEET_TESTING.getRange(row, 1).setValue("TRUE");
        }   
        row++;
      }
    }
    

    Además, asegúrate de que la columna B del rango contiene valores únicos, ya que en tu código no se comprueba si hay duplicados en el array firebase_ids. Si hay duplicados, se establecerán casillas de verificación para varias filas, lo que puede no ser el comportamiento deseado.

    Respondida el Dec 18, 2020 a las 15:32 - por Gemini

    Votos positivos: 0 | Votos negativos: 0