tutorial sheets scripts script openbyurl macro google espaƱol ejemplos docs developer apps app google-apps-script google-spreadsheet

google apps script - scripts - Eliminar una fila en Google Spreadsheets si el valor de la celda en dicha fila es 0 o en blanco



google spreadsheet macro (9)

solicitud bastante simple. Prueba esto :

function try_It(){ deleteRow(2); //// choose col = 2 for column C } function deleteRow(col){ // col is the index of the column to check for 0 or empty var sh = SpreadsheetApp.getActiveSheet(); var data = sh.getDataRange().getValues(); var targetData = new Array(); for(n=0;n<data.length;++n){ if(data[n][col]!='''' && data[n][col]!=0){ targetData.push(data[n])}; } Logger.log(targetData); sh.getDataRange().clear(); sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData); }

EDITAR : volver a leer la pregunta No estoy seguro si la pregunta es solicitar una función de edición en vivo o una función (como esta arriba) para aplicar después de haber ingresado los datos ... No es muy claro para mí. .. así que siéntete libre de ser más preciso si es necesario;)

Me gustaría poder eliminar una fila completa en Google Spreadsheets si el valor ingresado para decir la columna "C" en esa fila es 0 o en blanco. ¿Hay algún script simple que pueda escribir para lograr esto? ¡Gracias!


Al leer su pregunta cuidadosamente, se me ocurrió esta solución:

function onOpen() { // get active spreadsheet var ss = SpreadsheetApp.getActiveSpreadsheet(); // create menu var menu = [{name: "Evaluate Column C", functionName: "deleteRow"}]; // add to menu ss.addMenu("Check", menu); } function deleteRow() { // get active spreadsheet var ss = SpreadsheetApp.getActiveSpreadsheet(); // get active/selected row var activeRow = ss.getActiveRange().getRowIndex(); // get content column C var columnC = ss.getRange("C"+activeRow).getValue(); // evaluate whether content is blank or 0 (null) if (columnC == '''' || columnC == 0) { ss.deleteRow(parseInt(activeRow)); } }

Esta secuencia de comandos creará un menú al cargar el archivo y le permitirá eliminar una fila, según los criterios establecidos en la columna C, o no .


Escribí este script para hacer lo mismo con una de mis hojas de cálculo de Google. Quería poder ejecutar el script después de que todos los datos estuvieran en la hoja de cálculo, así que el script agrega una opción de menú para ejecutar el script.

/** * Deletes rows in the active spreadsheet that contain 0 or * a blank valuein column "C". * For more information on using the Spreadsheet API, see * https://developers.google.com/apps-script/service_spreadsheet */ function readRows() { var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getDataRange(); var numRows = rows.getNumRows(); var values = rows.getValues(); var rowsDeleted = 0; for (var i = 0; i <= numRows - 1; i++) { var row = values[i]; if (row[2] == 0 || row[2] == '''') { sheet.deleteRow((parseInt(i)+1) - rowsDeleted); rowsDeleted++; } } }; /** * Adds a custom menu to the active spreadsheet, containing a single menu item * for invoking the readRows() function specified above. * The onOpen() function, when defined, is automatically invoked whenever the * spreadsheet is opened. * For more information on using the Spreadsheet API, see * https://developers.google.com/apps-script/service_spreadsheet */ function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{ name : "Remove rows where column C is 0 or blank", functionName : "readRows" }]; sheet.addMenu("Script Center Menu", entries); };

Pruebe la hoja de cálculo antes:

Ejecutando script desde el menú:

Después de ejecutar el script:


function onEdit(e) { //Logger.log(JSON.stringify(e)); //{"source":{},"range":{"rowStart":1,"rowEnd":1,"columnEnd":1,"columnStart":1},"value":"1","user":{"email":"","nickname":""},"authMode":{}} try { var ss = e.source; // Just pull the spreadsheet object from the one already being passed to onEdit var s = ss.getActiveSheet(); // Conditions are by sheet and a single cell in a certain column if (s.getName() == ''Sheet1'' && // change to your own e.range.columnStart == 3 && e.range.columnEnd == 3 && // only look at edits happening in col C which is 3 e.range.rowStart == e.range.rowEnd ) { // only look at single row edits which will equal a single cell checkCellValue(e); } } catch (error) { Logger.log(error); } }; function checkCellValue(e) { if ( !e.value || e.value == 0) { // Delete if value is zero or empty e.source.getActiveSheet().deleteRow(e.range.rowStart); } }

Esto solo mira el valor de una sola edición de celda ahora y no los valores en la hoja completa.


Hay una manera más simple:

  1. Use el filtrado para mostrar solo las filas que desea eliminar. Por ejemplo, mi columna basada en la cual quiero eliminar filas tenía categorías, A, B, C. A través de la interfaz de filtrado seleccioné solo A y B, que quería eliminar.
  2. Seleccione todas las filas y elimínelas. Al hacer esto, en mi ejemplo, seleccioné efectivamente todas las filas A y B y las borré; ahora mi hoja de cálculo no muestra ninguna fila.
  3. Apaga el filtro Esto muestra mis filas de C ¡Hecho!

¡Puedo sugerir una solución simple sin usar un script!

Supongamos que quiere eliminar filas con texto vacío en la columna C. Ordene los datos (Menú Datos -> Ordenar hoja por columna C, A-> Z) en la columna wrt de la hoja, de modo que todas las filas de texto vacías estarán disponibles juntas .

Simplemente seleccione esas filas todas juntas y haga clic derecho -> eliminar filas. Luego puede volver a ordenar sus datos según la columna que necesita. Hecho.


¡Este código simple hizo el trabajo por mí!

function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // get active spreadsheet var activeRow = ss.getActiveRange().getRowIndex(); // get active/selected row var start=1; var end=650; var match=''''; var match2=0; //Edit this according to your choice. for (var i = start; i <= end; i++) { var columnC = ss.getRange("C"+i).getValue(); if (columnC ==match || columnC ==match2){ ss.deleteRow(i); } } }


Esto es lo que logré hacer el trabajo. Puede ver que hice un bucle hacia atrás a través de la hoja para que, al eliminar una fila, la siguiente fila no se omita. Espero que esto ayude a alguien.

function UpdateLog() { var returnSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(''RetLog''); var rowCount = returnSheet.getLastRow(); for (i = rowCount; i > 0; i--) { var rrCell = ''G'' + i; var cell = returnSheet.getRange(rrCell).getValue(); if (cell > 0 ){ logSheet. returnSheet.deleteRow(i); } } }


Estaba teniendo algunos problemas con las secuencias de comandos, así que mi solución fue utilizar la herramienta "Filtro".

  1. Seleccionar todos los datos de la hoja de cálculo
  2. Haga clic en el icono de la herramienta de filtro (se ve como una copa de vino)
  3. Haga clic en el ícono de filtro recientemente disponible en la primera celda de la columna que desea buscar.
  4. Seleccione "Filtrar por condición"> Establecer las condiciones (estaba usando "Texto contiene"> "palabra")

Esto dejará las filas que contienen la palabra que busca y se pueden eliminar de forma masiva seleccionándolas mientras mantiene presionada la tecla Mayús> clic derecho> eliminar filas.