Ir al contenido

Excel Online — Read sheet

Tipo: excelonline-read-sheet  ·  Paquete: Excel Online v1.0.4  ·  Salida: DataTable

Lee todos los datos de una hoja (su rango usado) y los devuelve como DataTable. Es la forma más cómoda de cargar una hoja entera sin tener que indicar el rango.

Opera sobre la sesión creada con Excel Online — Connect. Pásala en el parámetro session, o coloca esta actividad dentro del body de Excel Online — Connect para heredarla automáticamente.

Pide a Microsoft 365 el rango usado de la hoja y lo convierte en tabla. Con has-headers, la primera fila se usa como nombres de columna; si no, las columnas se llaman Column1, Column2, …

Ten en cuenta:

  • El rango usado empieza en la primera celda con contenido o formato, que no siempre es A1: si los datos empiezan en B3, la tabla empieza ahí. Las celdas que solo tienen formato (bordes, color) también cuentan como usadas y pueden aparecer como filas o columnas vacías.
  • Todas las columnas de la tabla son de texto: los números y booleanos llegan convertidos a string (con el separador decimal de la configuración regional del robot) y las fechas, como su número de serie de Excel ("45458"). Convierte con Convert.ToDecimal(...) o DateTime.FromOADate(...) cuando lo necesites.
  • Las celdas vacías llegan como texto vacío. Si la primera fila tiene una celda vacía, esa columna toma un nombre automático.
  • Si la hoja está vacía, Microsoft 365 informa A1 como rango usado: con has-headers = true obtienes una tabla sin filas.

Es solo lectura: no modifica el libro.

ParámetroTipoPor defectoDescripción
sheetstring—Nombre de la hoja, tal como aparece en la pestaña del libro.
ParámetroTipoPor defectoDescripción
sessionZoanExcelOnlineSession—Sesión de Excel Online — Connect. Dentro del body de Connect se hereda.
has-headersboolfalseSi es true, la primera fila son los nombres de columna; si no, columnas Column1, Column2, … y la primera fila se trata como datos.

Devuelve un DataTable con todos los datos de la hoja: una fila por fila de Excel (sin la de encabezados si has-headers = true) y tantas columnas como el ancho del rango usado. Recórrelo con un For each y accede por nombre de columna (fila["Cliente"]), o pásalo a otras actividades de DataTable o de escritura. El número de filas está en tabla.Rows.Count.

MensajeCausa y solución
No hay una sesión de Excel Online disponible. Indica 'session' desde una actividad excelonline-connect o coloca esta actividad dentro del cuerpo de la actividad Connect para que herede la sesión automáticamente.La actividad está fuera del body de Connect y no recibió session. Colócala dentro del body o pasa session = libro.
'sheet' es obligatorio.sheet está vacío o la expresión dio null.
itemNotFound (Microsoft Graph, 404)No existe una hoja con ese nombre. Revisa el nombre con Get sheet names.
A column named '…' already belongs to this DataTable.Con has-headers = true, dos encabezados de la primera fila tienen el mismo nombre. Renómbralos en el libro o lee sin encabezados.

Para reintentar ante límites o caídas temporales de Microsoft 365 (429, 503), usa Retry.

Excel Online — Connect credential = credential("m365-finanzas") path = "Reportes/Clientes.xlsx"
└─ body:
Excel Online — Read sheet sheet = "Clientes" has-headers = true → output: clientes
For each cliente in clientes
└─ Log message = cliente["Nombre"] + " - " + cliente["Correo"]