Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

390
Views
¿Cómo escribir elementos de matriz en una lista de rango usando Google Apps Script?

Tengo esta lista de rangos como destino y una fila de valores que deben escribirse en el destino. Estaba pensando en iterar a través de la fila de datos y también a través de la lista de rangos y establecer el valor en el camino, pero no puedo encontrar una manera de iterar a través de los elementos en la fila de datos. Aquí está la pieza de código en la que estoy trabajando:

 function moveItem() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); const values = sheet.getRange("A6:D9").getValues(); let data = []; const ref = sheet.getRange('A13').getValue(); const variation = sheet.getRange('C13').getValue(); for (let i = 0; i < values.length; i++) { if (values[i][0] == ref && values[i][4] == variation) { data.push(values[i]) } } const destRng = [ "B17", "B18", "D17", "D18" ] const rngList = sheet.getRangeList(destRng).getRanges(); for (let n = 0; n < data.length; n++) { rngList[n].setValue(data[n]) } }

Aquí hay una vista del flujo: ingrese la descripción de la imagen aquí

He aquí un ejemplo práctico: https://docs.google.com/spreadsheets/d/1IKr-faDQOk7VBpiTVnxUEMllXbe0ON9-gKwfJii3G0U/edit?usp=sharing

getValues() obtiene 01 fila de datos. Cada columna de esta fila debe ir al destRng a medida que recorremos estas columnas y los rangos de destino.

Ahora, esto es obtener el primer elemento de datos y escribirlo en todas las celdas de destino. ¿Cómo puedo revisar estos elementos de datos?

¡Gracias!

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

A partir de su información adicional, no puedo entender la lógica cuando "A13" y "C13" son "Texto1" y "Texto1C", "B17:B18" y "D17:D18" son Text1, Text1B y Text1C, Text1D , respectivamente. Pensé que en su hoja de cálculo de muestra, la "Variación" de "C12" podría ser de la columna "B". Cuando mi comprensión es correcta, ¿qué tal la siguiente modificación?

Guión modificado:

De:

 for (let i = 0; i < values.length; i++) { if (values[i][0] == ref && values[i][4] == variation) { data.push(values[i]) } }

A:

 for (let i = 0; i < values.length; i++) { if (values[i][0] == ref && values[i][1] == variation) { // Modified data.push(values[i]) } } if (data.length == 0) return; // Added data = data[0]; // Added
  • En esta modificación, cuando las celdas "A13" y "C13" son "Texto1" y "Texto1B", respectivamente, "B17:B18" y "D17:D18" pasan a ser Text1, Text1B y Text1C, Text1D , respectivamente.

Nota:

  • En esta modificación, utilicé su hoja de cálculo de muestra y su secuencia de comandos. Cuando su situación real es diferente de la que muestra en la hoja de cálculo de muestra, es posible que esta modificación no se pueda utilizar. Tenga cuidado con esto.

  • Cuando setValue se usa en un ciclo, el costo del proceso se vuelve alto. Si desea reducir el costo del proceso en su situación, puede hacerlo utilizando Sheets API de la siguiente manera. En este caso, habilite Sheets API en los servicios avanzados de Google.

    • De

       const rngList = sheet.getRangeList(destRng).getRanges(); for (let n = 0; n < data.length; n++) { rngList[n].setValue(data[n]) }
    • A

       const sheetName = sheet.getSheetName(); const reqs = destRng.map((e, i) => ({ range: `'${sheetName}'!${e}`, values: [[data[i]]] })); Sheets.Spreadsheets.Values.batchUpdate({ data: reqs, valueInputOption: "USER_ENTERED" }, ss.getId());
about 4 years ago · Juan Pablo Isaza Report

0

Los valores y el rango de destino deben tener el mismo número de elementos, suponiendo que esto sea cierto, no es necesario tener bucles for anidados, un solo bucle for es suficiente.

En otras palabras, en lugar de

 for (let n = 0; n < data.length; n++) { for (let i = 0; i < rngList.length; i++) { let dado = data[n] rngList[i].setValue(dado)//It sets the first value throughout the rngList } }

usar

 for (let n = 0; n < data.length; n++) { rngList[n].setValue(data[n]) }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!