> 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

## Descripción general

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

{% hint style="info" %}
**Disponible en RealmJoin.RunbookHelper 0.8.8.** La función la exporta el módulo; las copias en línea que incluían versiones anteriores de los runbooks 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 principales:

* **Cero dependencias de módulos** — 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 ensamblado en runbooks de informes mixtos.
* **Salida con estilo, lista para compartir** — cada hoja recibe una tabla de Excel con estilo (encabezado azul marino, filas cebra que conservan el reordenamiento, menús desplegables de filtro), una fila de encabezado inmovilizada, 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 primera pestaña de la hoja está coloreada en naranja RealmJoin.
* **Celdas fieles al tipo** — los números de .NET se convierten en números de Excel, `DateTime` valores y 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 en los que se puede hacer clic. Todas las demás cadenas permanecen como texto — valores como números de serie o IMEI nunca se convierten en números, y **no es posible la inyección de fórmulas**.
* **De una o varias hojas** — canaliza filas a una sola hoja o pasa un diccionario ordenado para un libro con varias hojas y una hoja de portada opcional "Info".
* **Pulido del informe integrado** — 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 mediante [Send-RjRbReportEmail](/es/dev-reference/report-functions/send-rjrbreportemail.md) y/o [Publish-RjRbFilesToStorageContainer](/es/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md).

## Prerrequisitos

Ninguno más allá de PowerShell. La función solo usa tipos de .NET disponibles en cada tiempo de ejecución de Azure Automation (`System.IO.Compression`, `System.Text`, `System.Xml`generación de cadenas sin System.Text ni System.Xml). No se requiere conexión a Graph ni a Az — la función funciona ú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, menús desplegables de filtro, fila de encabezado inmovilizada, columnas con tamaño automático y configuración de impresión — listo para adjuntar a un correo de informe o subirlo a 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 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 acepta mediante la canalización). El orden de las columnas sigue el orden de propiedades del primer objeto. Los diccionarios/hashtables se convierten en objetos. |
| `WorksheetName` | `string`      | `SingleSheet`          | Nombre de la única hoja. 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.                                                                   |

### Opcional — Contenido y formato

| Parámetro               | Tipo          | Predeterminado | Descripción                                                                                                                                                                                                                                                                                                                                                |
| ----------------------- | ------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CoverSheet`            | `IDictionary` | —              | Diccionario ordenado representado como una hoja de portada "Info" (primera pestaña): un `Título` la clave se convierte en el encabezado; todas las demás claves se convierten en filas de 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 hashtables con `Column` (nombre de encabezado), `Value` (texto exacto de la celda, sin distinguir mayúsculas y minúsculas) y `Color` (`Green`, `Red` o `Yellow` — los ajustes preestablecidos clásicos de resaltado de Excel). Las reglas se aplican en cada hoja que contiene la columna nombrada. |
| `DataBarColumns`        | `object[]`    | —              | Nombres de columnas numéricas que obtienen una barra de datos en la celda (naranja, degradado de mínimo a máximo), por ejemplo: `@('DeviceCount')`. Se omiten las columnas que no existen en una hoja.                                                                                                                                                     |
| `HyperlinkText`         | `IDictionary` | —              | Nombre de columna → texto mostrado para celdas de hipervínculo, por ejemplo: `@{ Portal = 'Open in Intune' }`. La celda muestra el texto descriptivo y el destino del enlace mantiene la URL completa. Las columnas sin asignación siguen mostrando la URL.                                                                                                |
| `NoHyperlink`           | `interruptor` | desactivado    | No convertir `http/https` las cadenas de URL en hipervínculos en los que se puede hacer clic.                                                                                                                                                                                                                                                              |
| `HideGridLines`         | `interruptor` | desactivado    | Oculta las líneas de cuadrícula de la hoja fuera de la tabla (las líneas de cuadrícula se mantienen de forma predeterminada para facilitar la lectura; la hoja de portada siempre las oculta).                                                                                                                                                             |
| `UseThousandsSeparator` | `interruptor` | desactivado    | Formatea las celdas numéricas con un separador de miles (`#,##0` para enteros, `#,##0.00` para decimales — localizado por Excel).                                                                                                                                                                                                                          |

## Ejemplos de uso

### Varias hojas

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

Las pestañas de hoja aparecen en el orden del diccionario; la primera pestaña está coloreada en naranja RealmJoin y 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 informativa, columnas de estado coloreadas 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 la `Título` valor como encabezado azul marino sobre una línea de acento naranja y todas las demás claves como filas de etiqueta/valor.

### Texto amigable del hipervínculo

Las columnas de URL son clicables de forma predeterminada y muestran la URL sin procesar. Asigna una columna a un texto descriptivo para mantener la tabla estrecha:

```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 asistentes de entrega

Un patrón común de extremo a extremo en los runbooks de informes: escribir el libro y luego adjuntarlo a un correo de informe y/o cargarlo para obtener un enlace 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 archivo adjunto de respaldo cuando se alcanza 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 mediante almacenamiento con un enlace de descarga con tiempo limitado
$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.

## Tratamiento de tipos de celda

| Valor de entrada                                                                     | Se representa como                                                                                                                                                                               |
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| tipos enteros/de coma flotante/decimales de .NET                                     | número de Excel (opcionalmente con separador de miles mediante `-UseThousandsSeparator`). `NaN`/`Infinity` vuelve a 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 de Graph típicos) | Se analizan y se representan como fechas reales de Excel ordenables.                                                                                                                             |
| `[bool]`                                                                             | Booleano de Excel (`TRUE`/`FALSE`).                                                                                                                                                              |
| `http://` / `https://` Cadenas de URL                                                | Hipervínculo en el que se puede hacer clic (suprime con `-NoHyperlink`; texto mostrado 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 control de errores

### Nombres de hoja

Los nombres de hoja se sanear para cumplir las reglas de Excel: 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 sufijo `_2`, `_3`, ….

### Encabezados de columna

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

### Hojas vacías

Una hoja cuyo conjunto de filas está vacío también se escribe — contiene una sola celda "No data available" y ninguna tabla. Un `-Worksheets` diccionario vacío, sin embargo, genera `Export-RjRbXlsx: -Worksheets debe contener al menos una entrada.`

### Límite de filas

Excel limita las hojas a 1.048.576 filas. La función genera `Export-RjRbXlsx: la hoja '<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 en varias hojas o entrégalas como CSV.

### Reglas de resaltado

* Las reglas que hacen referencia a una columna que no existe en una hoja se omiten silenciosamente para esa hoja (siguen aplicándose a las demás 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 (limitados entre 8 y 60 caracteres), por lo que las exportaciones muy grandes no ralentizan 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 falten — asegúrate de que exista la carpeta de destino (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 archivo 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 enlace de descarga con tiempo limitado.
* [Configuración de informes del runbook](/es/automatizacion/runbooks/runbook-report-settings.md) — configuración central 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) — genera un libro con varias hojas y 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
