Tengo un script de Google Apps que toma datos de una hoja de Google y los copia en una plantilla de diapositivas de Google con una tabla. En algunos casos, no hay tantas filas de datos en la hoja como en la tabla de plantilla y, como resultado, algunas filas de la tabla quedan parcialmente en blanco (vea la captura de pantalla de la tabla a continuación). Escribí una función que elimina las filas vacías de una tabla de Presentaciones de Google (vea la captura de pantalla del resultado deseado a continuación), y funciona bien en otras tablas que no tienen celdas combinadas (con la modificación de usar rowIndex++ en lugar de rowIndex = rowIndex + 3 en el bucle for).
function removeEmptyRowsTest(removeId) { var slides = SlidesApp.openById(removeId).getSlides(); var metricExcepSlide = slides[0]; var metricExcepTables = metricExcepSlide.getTables(); var table = metricExcepTables[0]; var numberOfRows = table.getNumRows(); for (var rowIndex = 1; rowIndex < numberOfRows; rowIndex = rowIndex+3) { var nextRow = table.getRow(rowIndex); // A row is assumed empty until proven otherwise var foundEmptyRow = false; //Logger.log(numberOfColumns) Logger.log(foundEmptyRow) Logger.log(nextRow.getCell(0).getText().asString()) Logger.log(nextRow.getCell(0).getText().asString().length) if (nextRow.getCell(0).getText().asString().length == 1) { foundEmptyRow = true; } if (foundEmptyRow) { table.getRow(rowIndex).remove() numberOfRows--; rowIndex--; } } } Pero cuando ejecuto la función en la tabla que se muestra a continuación, aparece el error Exception: This operation is only allowed on the head (upper left) cell of the merged cells. . Estoy confundido, porque tengo ganas de inicializar el índice de rowIndex en 1 e incrementarlo en 3 solo debería aplicarse a la celda superior izquierda del conjunto de tres celdas combinadas. Recibo el mismo error cuando inicializo el índice de rowIndex en 0 y/o lo incremento en 1. ¿Alguien sabe cómo puedo evitar este error y eliminar las filas vacías en la parte inferior de la tabla?
Creo que su objetivo es el siguiente.
En este caso, ¿qué tal la siguiente modificación? En esta modificación, "HEAD" y "MERGED" se verifican mediante el método de getMergeState . Se utiliza el bucle inverso.
function removeEmptyRowsTest(removeId) { var slides = SlidesApp.openById(removeId).getSlides(); var metricExcepSlide = slides[0]; var metricExcepTables = metricExcepSlide.getTables(); var table = metricExcepTables[0]; var numberOfRows = table.getNumRows(); // I modified below script. var checkCols = [0, 2, 3, 4]; for (var r = numberOfRows - 1; r > 0; r--) { if (table.getRow(r).getCell(0).getMergeState() == SlidesApp.CellMergeState.HEAD) { var checkEmpty = checkCols.filter(e => table.getRow(r).getCell(e).getText().asString().trim() != ""); if (checkEmpty.length == 0) { for (var dr = 3; dr > 0; dr--) { table.getRow(r + dr - 1).remove(); } } } } }