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

269
Views
Hojas de cálculo de Google: busque la última columna con datos en una matriz

Estoy tratando de encontrar la última columna en un rango, pero el problema es que no puedo especificar la secuencia de comandos para verificar solo dentro de una matriz en lugar de toda la hoja. Pude usar este fragmento de código para encontrar la última fila, pero tengo problemas para entender cómo se puede cambiar esto para encontrar la columna en lugar de la fila.

 function findLastRow() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Sheet1'); const data = sh.getRange("A:K").getValues(); const mR = sh.getMaxRows(); const indexes = []; data[0].forEach((_,ci)=>{ let col = data.map(d => d[ci]); let first_index = col.reverse().findIndex(r=>r!=''); if(first_index!=-1){ let max_row = mR - first_index; indexes.push(max_row); } }); last_row = indexes.length > 0 ? Math.max(...indexes) : 0; console.log(last_row); }

Fuente de este código

¿Alguien puede explicarme cómo se podría cambiar un poco esta función para buscar la columna en lugar de la fila?

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

0

Descripción

Encontrar la última fila o columna que contiene datos de un rango se puede simplificar con el uso de Range.getNextDataCell().

Aquí hay una hoja de cálculo con celdas escasamente pobladas.

ingrese la descripción de la imagen aquí

Código.gs

 function test() { try { let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test"); let range = sheet.getRange("A1:D10"); let lastRow = range.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); console.log("lastRow = "+lastRow); range = sheet.getRange("A1:E5"); lastColumn = range.getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn(); console.log("lastColumn = "+lastColumn); } catch(err) { console.log(err); } }

Registro de ejecución

 6:14:50 PM Notice Execution started 6:14:51 PM Info lastRow = 4 6:14:51 PM Info lastColumn = 4 6:14:51 PM Notice Execution completed

Referencia

  • Rango.getNextDataCell()
about 4 years ago · Juan Pablo Isaza Report

0

En su situación, ¿qué tal la siguiente modificación?

Guión modificado:

 function findLasColumn() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Sheet1'); const range = sh.getRange("A:K"); const offset = range.getColumn(); const maxColumn = Math.max(...range.getDisplayValues().map(r => r.reduceRight((n, c, i) => { if (!n && c) n = i; return n }, null))); const lastColumn = maxColumn + offset; console.log(lastColumn); }
  • Cuando se ejecuta este script, desde "A:K" , se devuelve el último número de columna.
  • Si usa "B:K" , el último número de columna se devuelve como el número de columna válido.

Referencia:

  • reducirDerecha()
about 4 years ago · Juan Pablo Isaza Report

0

Enfoque alternativo

También puede usar el método de transposición para poder obtener la última columna en su rango.

Guión modificado:

 function findLastColumn() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Sheet1'); const range = sh.getRange("C1:H18"); const data = transpose(range).map((values,index) => values[0].length ? index+range.getColumn() : null).filter(d => d); //The 'index+range.getColumn()' part returns the number of a non-empty col console.log(data[data.length-1]); } function transpose(range){ return range.getValues()[0].map((_, colIndex) => range.getValues().map(row => row[colIndex])); }

Hoja de muestra:

ingrese la descripción de la imagen aquí

  • Después de ejecutar la función findLastColumn()

ingrese la descripción de la imagen aquí

Referencia:

  • Transponer una matriz en JavaScript
  • Mapa de matriz de JavaScript ()
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!