> For the complete documentation index, see [llms.txt](https://docs.realmjoin.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.realmjoin.com/es/dev-reference/report-functions/export-rjrbxlsx.md).

# Export-RjRbXlsx

Exporta objetos desde runbooks de Azure Automation a libros de Excel nativos con estilo (.xlsx) sin dependencias de módulos externos.

## Resumen

`Export-RjRbXlsx` es el asistente estándar para producir archivos de informe de Excel (`.xlsx`) a partir de runbooks de informes de RealmJoin. Escribe una o más tablas de `PSCustomObject`s como un **libro de trabajo nativo de Excel** usando solo .NET (`System.IO.Compression`) — no se requiere `ImportExcel`, ni automatización COM, ni ningún otro módulo externo en el entorno de Automation.

{% hint style="info" %}
**Disponible desde RealmJoin.RunbookHelper 0.8.8.** La función la exporta el módulo; las copias en línea que llevaban versiones anteriores del runbook se han eliminado. Los runbooks que la usan declaran la versión del módulo en consecuencia:

```powershell
#Requires -Modules @{ModuleName = "RealmJoin.RunbookHelper"; ModuleVersion = "0.8.8" }
```

{% endhint %}

Características clave:

* **Dependencias de módulo cero** — el libro se ensambla directamente como un paquete Open XML mediante `System.IO.Compression.ZipArchive`. Esto evita tanto el coste de arranque en frío de módulos pesados como los conflictos de ensamblados en runbooks de informes mixtos.
* **Salida estilizada, lista para compartir** — cada hoja obtiene una tabla de Excel con estilo (encabezado azul marino, filas cebra que se mantienen al reordenar, menús desplegables de filtro), una fila de encabezado congelada, anchos de columna calculados y una configuración de impresión automática (la orientación se deriva del ancho del contenido, la fila de encabezado se repite en cada página impresa). La pestaña de la primera hoja se colorea de naranja RealmJoin.
* **Celdas fieles al tipo** — los números .NET se convierten en números de Excel, `Fecha y hora` los valores y las cadenas ISO-8601 (p. ej., campos de fecha de Graph) se convierten en fechas reales de Excel ordenables (localizadas por el cliente), y `http/https` las URL se convierten en hipervínculos clicables. Todas las demás cadenas se mantienen como texto — valores como números de serie o IMEI nunca se convierten en números, y **la inyección de fórmulas no es posible**.
* **De una o varias hojas** — canalice filas a una sola hoja, o pase un diccionario ordenado para un libro con varias hojas de cálculo más una hoja de portada opcional "Info".
* **Mejora de informe integrada** — reglas opcionales de resaltado de formato condicional para columnas de estado, barras de datos en la celda para columnas numéricas, texto de visualización amigable para hipervínculos y separadores de miles.

Un consumidor típico es un runbook de informes programado que genera archivos CSV y XLSX y luego los entrega [Send-RjRbReportEmail](/es/dev-reference/report-functions/send-rjrbreportemail.md) y/o [Publish-RjRbFilesToStorageContainer](/es/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md).

## Requisitos previos

Ninguna más allá de PowerShell en sí. La función solo usa tipos .NET disponibles en todos los entornos de ejecución de Azure Automation (`System.IO.Compression`, `System.Text`, `System.Xml`construcción de cadenas sin .NET). No se requiere conexión a Graph ni a Az: la función trabaja únicamente con datos locales y escribe un archivo local.

## Inicio rápido

La llamada mínima viable canaliza las filas a la función y especifica la ruta de salida:

```powershell
$devices | Export-RjRbXlsx -Path (Join-Path $env:TEMP 'devices.xlsx') -WorksheetName 'Devices'
```

Esto produce un libro con una sola hoja "Devices": tabla con estilo y menús desplegables de filtro, fila de encabezado congelada, columnas de ancho automático y configuración de impresión — listo para adjuntar a un correo de informe o cargarlo en un contenedor de almacenamiento.

## Parámetros

### Conjuntos de parámetros

La función tiene dos conjuntos de parámetros:

| Conjunto de parámetros         | Entrada                                                              | Caso de uso                                                     |
| ------------------------------ | -------------------------------------------------------------------- | --------------------------------------------------------------- |
| `SingleSheet` (predeterminado) | `-InputObject` (también mediante la canalización) + `-WorksheetName` | Una tabla, una hoja.                                            |
| `MultiSheet`                   | `-Worksheets` (diccionario ordenado)                                 | Varias tablas como hojas de cálculo separadas en un solo libro. |

### Requerido

| Parámetro | Tipo     | Descripción                                                                                   |
| --------- | -------- | --------------------------------------------------------------------------------------------- |
| `Ruta`    | `string` | Ruta completa del `.xlsx` archivo que se va a crear. **Un archivo existente se sobrescribe.** |

### Entrada de datos

| Parámetro       | Tipo          | Conjunto de parámetros | Descripción                                                                                                                                                                                                                                                                                               |
| --------------- | ------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `InputObject`   | `object[]`    | `SingleSheet`          | Las filas que se van a exportar (matriz de objetos; también se aceptan mediante la canalización). El orden de las columnas sigue el orden de las propiedades del primer objeto. Los diccionarios/tablas hash se convierten en objetos.                                                                    |
| `WorksheetName` | `string`      | `SingleSheet`          | Nombre de la única hoja, como máximo 31 caracteres (véase [Nombres de hojas de cálculo](#worksheet-names)). Predeterminado: `Report`.                                                                                                                                                                     |
| `Worksheets`    | `IDictionary` | `MultiSheet`           | Diccionario ordenado de nombre de hoja → filas, por ejemplo `([ordered]@{ 'Summary' = $summary; 'Details' = $details })`. Debe contener al menos una entrada. Las claves son nombres de hojas de cálculo, con como máximo 31 caracteres cada una (véase [Nombres de hojas de cálculo](#worksheet-names)). |

### Opcional — contenido y formato

| Parámetro               | Tipo          | Predeterminado | Descripción                                                                                                                                                                                                                                                                                                                                                        |
| ----------------------- | ------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CoverSheet`            | `IDictionary` | —              | Diccionario ordenado renderizado como una hoja de portada "Info" (primera pestaña): un `Title` la clave se convierte en el encabezado, todas las demás claves se convierten en filas etiqueta/valor, por ejemplo `([ordered]@{ Title = 'Device Report'; Tenant = 'contoso'; Generated = '2026-07-16 08:00 UTC' })`.                                                |
| `HighlightRules`        | `object[]`    | —              | Formato condicional para columnas de estado. Matriz de tablas hash con `Column` (nombre del encabezado), `Valor` (texto exacto de celda, sin distinguir mayúsculas/minúsculas) y `Color` (`Green`, `Red` o `Yellow` — los ajustes preestablecidos clásicos de resaltado de Excel). Las reglas se aplican en cada hoja de cálculo que contenga la columna nombrada. |
| `DataBarColumns`        | `object[]`    | —              | Nombres de columnas numéricas que obtienen una barra de datos en la celda (degradado naranja, de mínimo a máximo), por ejemplo `@('DeviceCount')`. Las columnas que no existen en una hoja de cálculo se omiten.                                                                                                                                                   |
| `HyperlinkText`         | `IDictionary` | —              | Nombre de columna → texto mostrado para celdas de hipervínculo, por ejemplo `@{ Portal = 'Open in Intune' }`. La celda muestra el texto amigable, el destino del vínculo sigue siendo la URL completa. Las columnas sin un mapeo siguen mostrando la URL.                                                                                                          |
| `NoHyperlink`           | `interruptor` | desactivado    | No convertir `http/https` cadenas URL en hipervínculos clicables.                                                                                                                                                                                                                                                                                                  |
| `HideGridLines`         | `interruptor` | desactivado    | Oculta las líneas de cuadrícula de la hoja fuera de la tabla (las líneas de cuadrícula se conservan de forma predeterminada por legibilidad; la hoja de portada siempre las oculta).                                                                                                                                                                               |
| `UseThousandsSeparator` | `interruptor` | desactivado    | Formatea celdas numéricas con separador de miles (`#,##0` para enteros, `#,##0.00` para decimales — localizado por Excel).                                                                                                                                                                                                                                         |

## Ejemplos de uso

### Varias hojas de cálculo

```powershell
Export-RjRbXlsx `
    -Worksheets ([ordered]@{ 'Summary' = $summaryRows; 'Details' = $detailRows }) `
    -Path (Join-Path $env:TEMP 'report.xlsx')
```

Las pestañas de las hojas aparecen en el orden del diccionario; la primera pestaña se colorea de naranja RealmJoin, las pestañas restantes en gris neutro.

### Hoja de portada, reglas de resaltado y barras de datos

El patrón completo de "libro de informe" con una hoja de portada de información, columnas de estado con color y barras de datos en la celda:

```powershell
$coverSheet = [ordered]@{
    Title             = 'Device Report'
    'Tenant'          = $tenantDisplayName
    'Generated (UTC)' = (Get-Date).ToUniversalTime().ToString('yyyy-MM-dd HH:mm')
    'Runbook version' = $Version
    'Devices total'   = "$($devices.Count)"
}

Export-RjRbXlsx `
    -Worksheets      ([ordered]@{ 'Devices' = $devices }) `
    -Path            (Join-Path $env:TEMP 'device-report.xlsx') `
    -CoverSheet      $coverSheet `
    -HighlightRules  @(
        @{ Column = 'Compliant'; Value = 'yes'; Color = 'Green' },
        @{ Column = 'Compliant'; Value = 'no';  Color = 'Red' }
    ) `
    -DataBarColumns  @('AppCount')
```

La hoja de portada se inserta como la primera pestaña llamada "Info", con el `Title` valor como un encabezado azul marino sobre una línea de acento naranja y todas las demás claves como filas etiqueta/valor.

### Texto amigable de hipervínculo

Las columnas URL son clicables de forma predeterminada y muestran la URL sin procesar. Asigna a una columna un texto de visualización amigable para mantener la tabla angosta:

```powershell
$rows = $devices | Select-Object DeviceName, SerialNumber, @{
    n = 'Portal'
    e = { "https://intune.microsoft.com/#view/Microsoft_Intune_Devices/DeviceSettingsMenuBlade/~/overview/mdmDeviceId/$($_.id)" }
}

$rows | Export-RjRbXlsx -Path $xlsxPath -WorksheetName 'Devices' -HyperlinkText @{ Portal = 'Open in Intune' }
```

### Combinación con los ayudantes de entrega

Un patrón habitual de extremo a extremo en runbooks de informes: escribir el libro, luego adjuntarlo a un correo de informe y/o cargarlo para obtener un vínculo de descarga:

```powershell
$xlsxPath = Join-Path $env:TEMP 'report.xlsx'
Export-RjRbXlsx -Worksheets ([ordered]@{ Changes = $changeRows; 'All Users' = $allUserRows }) `
    -Path $xlsxPath -CoverSheet $coverSheet

# Entrega por correo electrónico — el libro compacto es ideal como adjunto de respaldo para el límite de tamaño
Send-RjRbReportEmail `
    -EmailFrom       $emailFrom `
    -EmailTo         $EmailTo `
    -Subject         "Informe — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent $reportMd `
    -Attachments     @($xlsxPath)

# ...o entrega por almacenamiento con un vínculo de descarga limitado en el tiempo
$uploaded = Publish-RjRbFilesToStorageContainer `
    -FilePaths          $xlsxPath `
    -ContainerName      'reports' `
    -ResourceGroupName  $ResourceGroupName `
    -StorageAccountName $StorageAccountName `
    -AddBlobNamePrefix  $true
```

Ver [Send-RjRbReportEmail](/es/dev-reference/report-functions/send-rjrbreportemail.md) y [Publish-RjRbFilesToStorageContainer](/es/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) para la parte de entrega de este patrón.

## Manejo del tipo de celda

| Valor de entrada                                                                     | Se representa como                                                                                                                                                                               |
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Tipos .NET enteros/de coma flotante/decimales                                        | Número de Excel (opcionalmente con separador de miles mediante `-UseThousandsSeparator`). `NaN`/`Infinity` se devuelven como texto.                                                              |
| `[datetime]`                                                                         | Fecha real de Excel; los valores solo de fecha obtienen un formato de fecha, los valores con componente de hora obtienen un formato de fecha y hora. Localizado por el cliente que lo visualiza. |
| Cadenas de fecha ISO-8601 (`2026-07-16T08:00:00Z`, campos de fecha típicos de Graph) | Analizadas y renderizadas como fechas reales de Excel ordenables.                                                                                                                                |
| `[bool]`                                                                             | Booleano de Excel (`TRUE`/`FALSE`).                                                                                                                                                              |
| `http://` / `https://` Cadenas URL                                                   | Hipervínculo clicable (suprímalo con `-NoHyperlink`; texto visible mediante `-HyperlinkText`).                                                                                                   |
| Matrices / colecciones                                                               | Elementos unidos con `;` en una sola celda de texto.                                                                                                                                             |
| `$null` / `DBNull`                                                                   | Celda vacía.                                                                                                                                                                                     |
| Todo lo demás                                                                        | Texto sin formato. Se conserva el espacio en blanco inicial/final; las cadenas nunca se reinterpretan como números o fórmulas.                                                                   |

## Comportamiento y manejo de errores

### Nombres de hojas de cálculo

Los nombres de las hojas de cálculo se sanean para cumplir las reglas de Excel: los caracteres no válidos (`[ ] : * ? / \\`) se reemplazan, los nombres se truncan a 31 caracteres, los nombres vacíos se convierten en `Sheet<n>`, y los duplicados reciben un `_2`, `_3`, … sufijo.

{% hint style="warning" %}
**Mantén los nombres de las hojas de cálculo en 31 caracteres como máximo.** Esto se aplica a `-WorksheetName` y a las claves de `-Worksheets`, incluidos los valores insertados en tiempo de ejecución. Los nombres más largos se truncan sin aviso, lo que puede cortar la parte significativa del nombre o hacer que dos nombres sean idénticos (el segundo entonces recibe un `_2` sufijo). Elige nombres cortos y significativos sin `\\ / ? * [ ] :`, y usa el mismo nombre que el título de tabla coincidente en la pestaña [Datos de salida](/es/dev-reference/runbook-output-data.md#naming-a-table) del runbook, donde Exportar a Excel falla para títulos de más de 31 caracteres.
{% endhint %}

### Encabezados de columna

Los nombres de encabezado provienen del orden de propiedades del objeto de la primera fila. Los nombres de propiedad vacíos se convierten en `Column<n>`; los nombres duplicados (sin distinguir mayúsculas/minúsculas) se desduplican con un `_2`, `_3`, … sufijo, porque las columnas de tabla de Excel deben ser únicas y no vacías.

### Hojas de cálculo vacías

Una hoja de cálculo cuyo conjunto de filas está vacío se sigue escribiendo: contiene una sola celda "No data available" y ninguna tabla. Sin embargo, un diccionario vacío genera una excepción `-Worksheets` diccionario, sin embargo, lanza `Export-RjRbXlsx: -Worksheets debe contener al menos una entrada.`

### Límite de filas

Excel limita las hojas de cálculo a 1.048.576 filas. La función lanza `Export-RjRbXlsx: la hoja de cálculo '<name>' tiene <n> filas; el límite xlsx es de 1048575 filas de datos.` antes de escribir un archivo no válido. Divide las exportaciones muy grandes entre varias hojas de cálculo o entrégalas como CSV en su lugar.

### Reglas de resaltado

* Las reglas que hacen referencia a una columna que no existe en una hoja de cálculo se omiten silenciosamente para esa hoja (siguen aplicándose a otras hojas que sí tienen la columna).
* Un `Color` valor desconocido emite `Export-RjRbXlsx: color de resaltado desconocido '<color>' - usa Green, Red o Yellow. Se omite la regla.` como advertencia y omite solo esa regla.

### Anchos de columna

Los anchos se calculan a partir de la longitud del encabezado y de las primeras 1.000 filas de datos (restringido entre 8 y 60 caracteres), de modo que las exportaciones muy grandes no ralenticen el cálculo del ancho.

### Archivo de salida

Un archivo existente en `Ruta` se elimina y se vuelve a crear. La función no crea directorios principales que no existan — asegúrate de que la carpeta de destino exista (p. ej., `New-Item -ItemType Directory`).

## Salidas

La función no devuelve nada. Escribe el libro en `Ruta` y emite un mensaje detallado (`Export-RjRbXlsx: escribió <n> hoja(s) en <path>`) visible cuando el runbook se ejecuta con `-Verbose` o `$VerbosePreference = 'Continue'`.

## Véase también

* [Send-RjRbReportEmail](/es/dev-reference/report-functions/send-rjrbreportemail.md) — entrega el libro generado como adjunto de un correo de informe.
* [Publish-RjRbFilesToStorageContainer](/es/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) — carga el libro en Azure Blob Storage y devuelve un vínculo de descarga con tiempo limitado.
* [Configuración del informe del runbook](/es/automatizacion/runbooks/runbook-report-settings.md) — configuración centralizada de los canales de entrega del informe.
* Ejemplo de uso en un runbook de producción: [sync-MFA-secure-users-to-group\_scheduled.ps1](https://github.com/realmjoin/realmjoin-runbooks/blob/master/org/security/sync-MFA-secure-users-to-group_scheduled.ps1) — construye un libro de varias hojas con una hoja de portada "Info".


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.realmjoin.com/es/dev-reference/report-functions/export-rjrbxlsx.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
