Power Automate y los límites de lectura en tablas Excel

Javier Ferreiro
Anyone can Automate
6 min readNov 29, 2021

--

En Power Automate y la pócima para leer tablas Excel, nuestra compañera Sheila Viqueira nos ponía en alerta en torno al número de filas por defecto que lee la acción ‘Enumerar las filas de una tabla’ -List rows present in a table- del conector Excel Online (Empresas)’ y de cómo activar la funcionalidad de paginación para incrementar este valor.

Designed by Dooder / Freepik

Sucede que la función de paginación también tiene un limite máximo: pues bien, hoy vamos aprender cómo sortearlo, lo que nos servirá de excusa para familiarizarnos con un tipo de bucle del que apenas hemos hablado hasta la fecha: la acción ‘Repetir hasta’ -Do until-.
No nos entretenemos más. ¡Al lío!

Excel y los límites de la paginación

Así pues, Sheila ya nos adelantaba en el citado artículo la secuencia completa para activar la paginación en nuestra acción.

Dependiendo de la licencia de Power Automate de la que disfrutemos, la funcionalidad de paginación nos permitirá incrementar el número máximo de filas que podremos leer desde el valor por defecto de 256:

  • un máximo de 100.000, o…
Al configurar el umbral de la paginación por encima de los 100.000 se nos muestra un error
  • …un máximo de 5.000
La pantalla de configuración nos permite configurar un umbral superior a 5.000, sin embargo al guardar nuestro Flow, el editor nos muestra el siguiente error

Supongamos que el límite de nuestra licencia es de 5.000 filas. ¿Cómo leer una tabla de 6.001 filas? Por fortuna, hay mecanismos para sortear tanto ese límite, como incluso el de 100.000 filas. La magia correrá por cuenta:

  • de al menos tres variables (la primera de tipo matriz para almacenar la tabla Excel al completo, la segunda de tipo entero para llevar la cuenta del número de filas en la última invocación de ‘Enumerar las filas de una tabla’, y la tercera de tipo entero para llevar la cuenta del número de filas leídas en total es decir las filas a omitir en la siguiente invocación de ‘Enumerar las filas de una tabla’); y
La declaración de nuestras tres variables
  • de un bucle ‘Repetir hasta’ -Do until- con el que invocaremos las veces que sea necesaria la acción ‘Enumerar las filas de una tabla’ y actualizaremos las variables anteriormente declaradas; y
Nuestro bucle, por dentro
  • de una entrada muy particular de nuestra acción ‘Enumerar las filas de una tabla’ ¡atención a la infografía!
La entrada ‘Recuento de omisiones’ -skip count-, clave en nuestro caso de uso de hoy

Primeros pasos

Para nuestras pruebas, contaremos con una tabla excel de hasta 6.001 filas… y en el diseño de nuestro Flow incorporaremos la inicialización de las tres variables antes mencionadas. ¡Turno para nuestro bucle!

Configurando nuestro bucle

¿Cómo incluir un bucle ‘Repetir hasta’? Seleccionamos ‘Nuevo paso’ y el conector ‘Control’. ¿Veis nuestra nueva acción en el listado?

Al incorporar esta nueva acción, comprobaremos que es necesario configurar una regla de condición; para a continuación incluir en el interior de ‘Repetir hasta’ tantas acciones como precisemos. Estas acciones se ejecutarán al menos una vez, pues la regla de condición se evalúa tras cada iteración, y no antes.
Para nuestro propósitos, nos interesa que la regla de condición compruebe si la variable ‘FilasUltimaLectura’ es menor que 5.000. En el interior de nuestro bucle actualizaremos la variable con el número de filas leída en cada iteración. De esta forma:

  • si la tabla contiene menos de 5.000 filas, se ejecutará el contenido del bucle una sola vez, y
  • si la tabla contiene entre 5.000 y 9.999, se ejecutará el contenido del bucle dos veces, y
  • así sucesivamente

Leyendo filas de forma sucesiva en bloques de 5.000

El primer paso a añadir en el interior del bucle será ‘Enumerar las filas de una tabla’, asegurándonos que incluye dos detalles decisivos en su configuración:

  • paginación activada con un valor de umbral de 5.000, y
  • entrada ‘Recuento de omisiones’ -skip count- a la que asignaremos el valor de la variable ‘FilasAOmitir’, que hemos inicializado a cero

Actualizando variables en el interior de nuestro bucle

El reto apenas ha comenzado, necesitaremos actualizar los valores de las tres variables en liza en el interior del bucle, justo antes de que se evalúe la regla de condición de éste:

  • La variable ‘FilasUltimaLectura’ tomará como valor el resultado de calcular el número de filas leídas en la última ejecución de ‘Enumerar las filas de una tabla’. La magia correrá a cargo de la acción ‘Establecer variable’ y de la siguiente expresión WDL:
length(outputs('Enumerar_las_filas_de_una_tabla')?['body/value'])
  • La variable ‘FilasAOmitir’ deberá incrementarse con el valor calculado en el paso anterior. La magia correrá a cargo de la acción ‘Incrementar variable’
  • Finalmente, incorporaremos el nuevo bloque de filas leído en la actual iteración a la variable ‘miMatrizFilasResultado’ apoyándonos en un acción ‘Redactar’ -Compose- (donde almacenaremos temporalmente el valor de esta misma variable) y de la función WDL union() conforme a la siguiente expresión WDL:
union(outputs('Redactar_matrizAux'),outputs('Enumerar_las_filas_de_una_tabla')?['body/value'])
Dentro del bucle ‘Repetir hasta’ hay mucho trabajo actualizando variables

Un detalle fundamental es que al utilizar la función union() eliminaremos cualquier posible duplicado de fila en nuestra Excel. Estamos suponiendo que nuestra tabla cuenta con una columna clave (esto es, que toma un valor único para cada fila) y por tanto suponiendo que los duplicados no existen. Si la columna clave no existe, y necesitáramos mantener posibles duplicados, la aproximación deberá ser diferente.

Comprobando el resultado

Para asegurarnos de que la estrategia seguida es correcta, incorporaremos un bloque de acción ‘Redactar’ -Compose- fuera del bucle como último paso, asignándole una expresión WDL que nos permita calcular el número de elementos almacenados en nuestra matriz de salida

Y el resultado tras ejecutar nuestro Flow es…

¡Límite superado!

Dos retos pendientes

Como nos gusta repetir en este blog, el diablo está en los detalles. Y es que la acción ‘Repetir hasta’ -Do until- presenta sus propios límites por defecto, que no han interferido en el ejemplo de hoy, pero podrían resultar una molesta piedra en el zapato si no los tenemos en cuenta para otros casos de uso. ¿Buenas noticias? Que encontraréis información al respecto en nuestra cuenta de Twitter…

¿Y qué hay del segundo reto pendiente? Pues que el objetivo de un Flow de Power Automate no suele quedarse simplemente en contar las filas de una tabla Excel. Lo habitual será procesarlas, y para ello, uno de nuestros mejores aliados será el ‘menú de contenidos dinámicos’ -dynamic content menu-.
Bien, la aproximación documentada en este post cubre la construcción de una matriz con el total de filas de nuestra tabla, pero… no la incorporación de los atributos de cada uno de los elementos de ésta al menú de contenidos dinámicos. Resolver este nuevo reto (el primero de nuestros retos pendientes) correrá por cuenta de la acción ‘Análisis del archivo JSON’ -Parse JSON-. Y sobre esto tengo buenas y malas noticias. ¿Las malas? Que este post es y demasiado extenso. ¿Las buenas? Que hace ya tiempo abordamos el uso de esta acción en Power Automate y el conjuro para descifrar tablas Excel (2)… y que en ese mismo post la empleábamos en un caso de uso de lectura de tablas Excel.

¡Saludos, PowerNautas!

--

--