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

480
Views
Cómo eliminar celdas en un rango de una columna en el script de la aplicación de Google usando getLastRow()

He estado buscando a través de stackoverflow para obtener ayuda sobre cómo escribir en las hojas de Google una función que me permitiría eliminar celdas vacías en un rango y desplazarlas (hacia la izquierda) cuando se complete. Solo he visto preguntas sobre la eliminación de filas o columnas vacías en lugar de celdas en un rango.

Así es como se ven los datos con los que estoy tratando de trabajar:

ejemplo de hoja de google

Necesito eliminar las celdas A1-A15 y cambiar las otras columnas .

Lo que está funcionando actualmente es el siguiente código, sin embargo, eliminará/desplazará la columna incluso si hay datos en la columna (A) que estoy revisando la función (por ejemplo, datos en la celda A6).

Quiero asegurarme de que esta función no se active si hay datos en la columna A antes de la última y penúltima entrada de datos según el ejemplo. :

 function blankRemoval(){ var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1');//need to call sheet by name as I have multiple tabs var lastRow = sheet.getLastRow() var cellsBlank = sheet.getRange(1,1).isBlank(); if(cellsBlank) { sheet.getRange(1,1,lastRow-3,1).deleteCells(SpreadsheetApp.Dimension.COLUMNS); // shifts cells left }//end of if }//end of function

Entonces, con esto en mente, pensé que podría hacer que la variable cellBlank use .getRange(1,1,lastRow-3,1) también para que solo mire a través del rango hasta la última fila y se detenga 3 desde la última fila. Sin embargo, cuando uso este código, no elimina las celdas si hay datos en ellas o no (la función se ejecuta sin errores pero no ocurre nada).

He probado algunos elementos diferentes para usar en esto, pero me estoy topando con una pared porque no soy un programador competente. Mi conjetura es que necesita iterar, o estoy haciendo algo mal con el rango.

También tenga en cuenta que siempre habrá 2 entradas de datos en la columna A como mi ejemplo, con los datos separados por una celda. Esta es una especie de entrada para ayudar con la revisión histórica. Quiero conservar estas dos celdas donde están, pero cambiar los datos vacíos de arriba

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

0

Probablemente debería ser esto:

 function blankRemoval(){ var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1'); var col_A = sheet.getRange(1,1,sheet.getLastRow()-3,1); if (col_A.getValues().flat().filter(String).length == 0) { // <-- if the col A is empty col_A.deleteCells(SpreadsheetApp.Dimension.COLUMNS); } }

.getValues() obtiene una matriz 2d con valores

.flat() convierte la matriz 2d en una matriz 1d

.filter(String) elimina de la matriz todas las celdas vacías

.length obtiene una longitud de la matriz

De esta manera, si el rango contiene celdas vacías, solo la matriz no tendrá elementos (array.length = 0)

Antes:

ingrese la descripción de la imagen aquí

Después:

ingrese la descripción de la imagen aquí

Actualizar

Resultó que algunas celdas de la columna 'A' podían contener espacios. Aquí hay una función modificada que elimina espacios del rango:

 function blankRemoval(){ var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1'); var col_A = sheet.getRange(1,1,sheet.getLastRow()-3,1); var contents = col_A.getValues().flat().join('').replace(/\s+/g,''); if (contents == '') col_A.deleteCells(SpreadsheetApp.Dimension.COLUMNS); }
about 4 years ago · Juan Pablo Isaza Report

0

Esta parece ser la mejor función para usar en la pregunta que planteé gracias a @Yuri. ClearContent ayuda a eliminar cualquier entrada que impida que se lleve a cabo la acción deleteCells.

 function blankRemoval(){ var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1'); var col_A = sheet.getRange(1,1,sheet.getLastRow()-3,1); if (col_A.getValues().flat().filter(String).length == 0) { col_A.clearContent();} //<---checks if cell range is empty, and if so performs a clear content (this seemed to fix issues with any ghost entries) if (col_A.getValues().flat().filter(String).length == 0) { // <-- if the col A is empty col_A.deleteCells(SpreadsheetApp.Dimension.COLUMNS); } }

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!