> 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

## Resumen

`Export-RjRbXlsx` es el ayudante 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 Excel nativo** usando solo .NET (`System.IO.Compression`) — sin `ImportExcel`, ni automatización COM; no se requiere ningún otro módulo externo en el entorno de Automation.

{% hint style="warning" %}
**Aún no forma parte de RealmJoin.RunbookHelper.** `Export-RjRbXlsx` aún no se distribuye con el **RealmJoin.RunbookHelper** módulo — se incluirá con el **próximo lanzamiento del módulo**. Hasta entonces, la función se duplica en línea en los runbooks que la usan y puede copiarse desde allí, por ejemplo desde [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) (región *Definiciones de funciones*).
{% endhint %}

Características clave:

* **Sin dependencias de módulos** — el libro se ensambla directamente como un paquete Open XML mediante `System.IO.Compression.ZipArchive`. Esto evita tanto el costo de arranque en frío de módulos pesados como conflictos de ensamblado en runbooks de informes mixtos.
* **Salida con estilo, lista para compartir** — cada hoja de cálculo recibe una tabla de Excel con estilo (encabezado azul marino, filas cebra que se mantienen tras reordenar, menús desplegables de filtro), una fila de encabezado congelada, anchos de columna calculados y una configuración de impresión automática (orientación derivada del ancho del contenido, fila de encabezado repetida 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` los 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 **la inyección de fórmulas no es posible**.
* **De una o varias hojas de cálculo** — canaliza filas a una sola hoja, o pasa un diccionario ordenado para un libro con varias hojas de cálculo más una hoja de portada opcional "Info".
* **Pulido del informe incorporado** — reglas opcionales de resaltado con formato condicional para columnas de estado, barras de datos en 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).

## Requisitos previos

Ninguno más allá de PowerShell. La función solo usa tipos de .NET disponibles en cada entorno de ejecución de Azure Automation (`System.IO.Compression`, `System.Text`, `System.Xml`sin bibliotecas para la creación de cadenas). 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 y menús desplegables de filtro, fila de encabezado congelada, columnas con ancho automático y configuración de impresión — listo para adjuntarlo 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 de cálculo separadas en un solo libro. |

### Obligatorio

| Parámetro | Tipo     | Descripción                                                                                   |
| --------- | -------- | --------------------------------------------------------------------------------------------- |
| `Ruta`    | `cadena` | 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 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/hashtables se convierten en objetos. |
| `Nombre de la hoja de cálculo` | `cadena`      | `SingleSheet`          | Nombre de la única hoja de cálculo. Predeterminado: `Informe`.                                                                                                                                                             |
| `Hojas de cálculo`             | `IDictionary` | `MultiSheet`           | Diccionario ordenado de nombre de hoja → filas, por ejemplo: `([ordered]@{ 'Resumen' = $summary; 'Detalles' = $details })`. Debe contener al menos una entrada.                                                            |

### Opcional — Contenido y formato

| Parámetro                      | Tipo          | Predeterminado | Descripción                                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------------ | ------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Hoja de portada`              | `IDictionary` | —              | Diccionario ordenado representado como una hoja de portada "Info" (primera pestaña): una `Título` la clave se convierte en el encabezado, todas las demás claves se convierten en filas etiqueta/valor, por ejemplo: `([ordered]@{ Título = 'Informe del dispositivo'; Tenant = 'contoso'; Generado = '2026-07-16 08:00 UTC' })`.                                              |
| `Reglas de resaltado`          | `object[]`    | —              | Formato condicional para columnas de estado. Matriz de hashtables con `Columna` (nombre del encabezado), `Valor` (texto exacto de la celda, sin distinción de mayúsculas y minúsculas) y `Color` (`Green`, `Red` o `Yellow` — los clásicos ajustes preestablecidos de resaltado de Excel). Las reglas se aplican en cada hoja de cálculo que contenga la columna especificada. |
| `Columnas de barras de datos`  | `object[]`    | —              | Nombres de columnas numéricas que reciben una barra de datos en la celda (naranja, degradado de mínimo a máximo), por ejemplo: `@('DeviceCount')`. Las columnas que no existen en una hoja de cálculo se omiten.                                                                                                                                                               |
| `Texto de hipervínculo`        | `IDictionary` | —              | Nombre de columna → texto mostrado para celdas de hipervínculo, por ejemplo: `@{ Portal = 'Abrir en Intune' }`. La celda muestra el texto amigable, el destino del enlace conserva la URL completa. Las columnas sin un mapeo siguen mostrando la URL.                                                                                                                         |
| `Sin hipervínculo`             | `interruptor` | desactivado    | No convertir `http/https` cadenas URL en hipervínculos en los que se puede hacer clic.                                                                                                                                                                                                                                                                                         |
| `Ocultar líneas de cuadrícula` | `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).                                                                                                                                                                                           |
| `Usar separador de miles`      | `interruptor` | desactivado    | Formatea las celdas numéricas con un separador de miles (`#,##0` para enteros, `#,##0.00` para decimales — localizados por Excel).                                                                                                                                                                                                                                             |

## Ejemplos de uso

### Varias hojas de cálculo

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

Las pestañas de la 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 informes" con una hoja de portada informativa, columnas de estado coloreadas y barras de datos en celda:

```powershell
$coverSheet = [ordered]@{
    Título             = 'Informe del dispositivo'
    'Tenant'          = $tenantDisplayName
    'Generado (UTC)' = (Get-Date).ToUniversalTime().ToString('yyyy-MM-dd HH:mm')
    'Versión del runbook' = $Version
    'Total de dispositivos'   = "$($devices.Count)"
}

Export-RjRbXlsx `
    -Worksheets      ([ordered]@{ 'Dispositivos' = $devices }) `
    -Path            (Join-Path $env:TEMP 'device-report.xlsx') `
    -CoverSheet      $coverSheet `
    -HighlightRules  @(
        @{ Column = 'Compliant'; Value = 'sí'; 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 `Título` 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 de URL son clicables de forma predeterminada y muestran la URL sin procesar. Asigna una columna a un texto amigable de visualización 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 = 'Abrir en Intune' }
```

### Combinación con los ayudantes de entrega

Un patrón común de extremo a extremo en runbooks de informes: escribe el libro, luego adjúntalo a un correo de informe y/o súbelo para obtener un enlace de descarga:

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

# Entrega por correo electrónico — el libro compacto es ideal como adjunto de respaldo ante límites 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
```

Véase [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                                                                     | Renderizado como                                                                                                                                                                               |
| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Tipos enteros, de coma flotante y decimales de .NET                                  | número de Excel (opcionalmente con separador de miles mediante `-UseThousandsSeparator`). `NaN`/`Infinity` se convierten de nuevo en texto.                                                    |
| `[datetime]`                                                                         | Fecha real de Excel; los valores solo de fecha reciben un formato de fecha, los valores con componente de hora reciben 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 representadas como fechas reales de Excel, ordenables.                                                                                                                            |
| `[bool]`                                                                             | booleano de Excel (`TRUE`/`FALSE`).                                                                                                                                                            |
| `http://` / `https://` cadenas URL                                                   | Hipervínculo en el que se puede hacer clic (suprimir con `-NoHyperlink`; texto de visualización mediante `-HyperlinkText`).                                                                    |
| Matrices / colecciones                                                               | Los elementos se unen con `;` en una sola celda de texto.                                                                                                                                      |
| `$null` / `DBNull`                                                                   | Celda vacía.                                                                                                                                                                                   |
| Todo lo demás                                                                        | Texto sin formato. Los espacios en blanco iniciales/finales se conservan; las cadenas nunca se reinterpretan como números o fórmulas.                                                          |

## Comportamiento y control de errores

### Nombres de hojas de cálculo

Los nombres de las hojas de cálculo se normalizan 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 `Hoja<n>`, y los duplicados reciben un `_2`, `_3`sufijo «, …».

### Encabezados de columna

Los nombres de los encabezados provienen del orden de las propiedades del objeto de la primera fila. Los nombres de propiedades vacíos se convierten en `Columna<n>`; los nombres duplicados (sin distinción de mayúsculas y minúsculas) se deduplican con un `_2`, `_3`sufijo «, …», porque las columnas de las tablas 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 hay datos disponibles" y ninguna tabla. Un `-Worksheets` diccionario, sin embargo, genera `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 genera `Export-RjRbXlsx: la hoja de cálculo '<name>' tiene <n> filas - el límite de xlsx es de 1048575 filas de datos.` antes de escribir un archivo no válido. Divide las exportaciones muy grandes en 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 de cálculo (siguen aplicándose a otras hojas de cálculo que sí tienen la columna).
* Un `Color` valor desconocido emite `Export-RjRbXlsx: color de resaltado desconocido '<color>' - usa Green, Red o Yellow. Omitiendo 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 se ralentizan al calcular los anchos.

### Archivo de salida

Un archivo existente en `Ruta` se elimina y se vuelve a crear. La función no crea los directorios principales que falten — 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) de cálculo 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 enlace de descarga con tiempo limitado.
* [Configuración de informe del runbook](/es/automatizacion/runbooks/runbook-report-settings.md) — configuración central de los canales de entrega del informe.
* Ejemplo de uso en línea: [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) — el runbook que actualmente contiene la función hasta que se incluya en el módulo.


---

# 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.
