> 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/fr/dev-reference/report-functions/export-rjrbxlsx.md).

# Export-RjRbXlsx

## Vue d’ensemble

`Export-RjRbXlsx` est l’assistant standard pour produire des fichiers de rapport Excel (`.xlsx`) à partir de runbooks de reporting RealmJoin. Il écrit une ou plusieurs tables de `PSCustomObject`s en tant que **classeur Excel natif** en utilisant uniquement .NET (`System.IO.Compression`) — aucun `ImportExcel`, aucune automatisation COM, aucun autre module externe n’est requis dans l’environnement Automation.

{% hint style="info" %}
**Disponible à partir de RealmJoin.RunbookHelper 0.8.8.** La fonction est exportée par le module ; les copies intégrées que les versions antérieures des runbooks contenaient ont été supprimées. Les runbooks qui l’utilisent déclarent la version de module correspondante :

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

{% endhint %}

Caractéristiques principales :

* **Aucune dépendance de module** — le classeur est assemblé directement sous forme de package Open XML via `System.IO.Compression.ZipArchive`. Cela évite à la fois le coût de démarrage à froid des modules lourds et les conflits d’assembly dans les runbooks de reporting mixtes.
* **Sortie stylée, prête à partager** — chaque feuille de calcul reçoit une table Excel stylée (en-tête bleu marine, lignes zébrées qui suivent le nouveau tri, listes déroulantes de filtre), une ligne d’en-tête figée, des largeurs de colonnes calculées et une configuration d’impression automatique (orientation dérivée de la largeur du contenu, ligne d’en-tête répétée sur chaque page imprimée). Le premier onglet de feuille de calcul est coloré en orange RealmJoin.
* **Cellules fidèles aux types** — les nombres .NET deviennent des nombres Excel, `DateTime` les valeurs et les chaînes ISO-8601 (p. ex. les champs de date Graph) deviennent de véritables dates Excel triables (localisées par le client), et `http/https` les URL deviennent des liens hypertextes cliquables. Toutes les autres chaînes restent du texte — les valeurs telles que les numéros de série ou les IMEI ne sont jamais converties en nombres, et **l’injection de formules est impossible**.
* **Une ou plusieurs feuilles de calcul** — envoyez des lignes via le pipeline dans une seule feuille, ou transmettez un dictionnaire ordonné pour un classeur avec plusieurs feuilles de calcul et une feuille de couverture « Info » facultative.
* **Finition de rapport intégrée** — règles facultatives de surbrillance par mise en forme conditionnelle pour les colonnes d’état, barres de données dans les cellules pour les colonnes numériques, texte d’affichage convivial pour les liens hypertextes et séparateurs de milliers.

Un consommateur typique est un runbook de reporting planifié qui génère des fichiers CSV et XLSX, puis les transmet via [Send-RjRbReportEmail](/fr/dev-reference/report-functions/send-rjrbreportemail.md) et/ou [Publish-RjRbFilesToStorageContainer](/fr/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md).

## Prérequis

Aucun au-delà de PowerShell lui-même. La fonction utilise uniquement des types .NET disponibles dans chaque runtime Azure Automation (`System.IO.Compression`, `System.Text`, `System.Xml`-création de chaînes sans). Aucune connexion Graph ou Az n’est requise — la fonction travaille uniquement sur des données locales et écrit un fichier local.

## Démarrage rapide

L’appel minimal viable envoie les lignes à la fonction via le pipeline et spécifie le chemin de sortie :

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

Cela produit un classeur avec une seule feuille de calcul « Devices » : table stylée avec listes déroulantes de filtre, ligne d’en-tête figée, colonnes dimensionnées automatiquement et configuration d’impression — prêt à être joint à un e-mail de rapport ou téléversé vers un conteneur de stockage.

## Paramètres

### Jeux de paramètres

La fonction dispose de deux jeux de paramètres :

| Jeu de paramètres          | Entrée                                                        | Cas d’utilisation                                                                   |
| -------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| `SingleSheet` (par défaut) | `-InputObject` (également via le pipeline) + `-WorksheetName` | Une table, une feuille de calcul.                                                   |
| `MultiSheet`               | `-Worksheets` (dictionnaire ordonné)                          | Plusieurs tables sous forme de feuilles de calcul distinctes dans un même classeur. |

### Obligatoire

| Paramètre | Type     | Description                                                                    |
| --------- | -------- | ------------------------------------------------------------------------------ |
| `Chemin`  | `chaîne` | Chemin complet du `.xlsx` fichier à créer. **Un fichier existant est écrasé.** |

### Entrée de données

| Paramètre       | Type          | Jeu de paramètres | Description                                                                                                                                                                                                    |
| --------------- | ------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `InputObject`   | `object[]`    | `SingleSheet`     | Les lignes à exporter (tableau d’objets ; également accepté via le pipeline). L’ordre des colonnes suit l’ordre des propriétés du premier objet. Les dictionnaires/tables de hachage sont convertis en objets. |
| `WorksheetName` | `chaîne`      | `SingleSheet`     | Nom de l’unique feuille de calcul. Par défaut : `Rapport`.                                                                                                                                                     |
| `Worksheets`    | `IDictionary` | `MultiSheet`      | Dictionnaire ordonné de nom de feuille de calcul → lignes, p. ex. `([ordered]@{ 'Summary' = $summary; 'Details' = $details })`. Doit contenir au moins une entrée.                                             |

### Facultatif — Contenu et mise en forme

| Paramètre               | Type          | Par défaut | Description                                                                                                                                                                                                                                                                                                                                                  |
| ----------------------- | ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CoverSheet`            | `IDictionary` | —          | Dictionnaire ordonné rendu sous forme de feuille de couverture « Info » (premier onglet) : une clé `Title` devient le titre, toutes les autres clés deviennent des lignes étiquette/valeur, p. ex. `([ordered]@{ Title = 'Device Report'; Tenant = 'contoso'; Generated = '2026-07-16 08:00 UTC' })`.                                                        |
| `HighlightRules`        | `object[]`    | —          | Mise en forme conditionnelle pour les colonnes d’état. Tableau de tables de hachage avec `Column` (nom d’en-tête), `Value` (texte de cellule exact, insensible à la casse) et `Color` (`Vert`, `Rouge` ou `Jaune` — les préréglages de surbrillance Excel classiques). Les règles sont appliquées à chaque feuille de calcul qui contient la colonne nommée. |
| `DataBarColumns`        | `object[]`    | —          | Noms de colonnes numériques qui reçoivent une barre de données dans la cellule (orange, dégradé du minimum au maximum), p. ex. `@('DeviceCount')`. Les colonnes qui n’existent pas dans une feuille de calcul sont ignorées.                                                                                                                                 |
| `HyperlinkText`         | `IDictionary` | —          | Nom de colonne → texte d’affichage pour les cellules de lien hypertexte, p. ex. `@{ Portal = 'Open in Intune' }`. La cellule affiche le texte convivial, la cible du lien reste l’URL complète. Les colonnes sans mappage continuent d’afficher l’URL.                                                                                                       |
| `NoHyperlink`           | `commutateur` | désactivé  | Ne pas convertir `http/https` les chaînes URL en liens hypertextes cliquables.                                                                                                                                                                                                                                                                               |
| `HideGridLines`         | `commutateur` | désactivé  | Masquer le quadrillage de la feuille de calcul en dehors de la table (le quadrillage est conservé par défaut pour la lisibilité ; la feuille de couverture le masque toujours).                                                                                                                                                                              |
| `UseThousandsSeparator` | `commutateur` | désactivé  | Formater les cellules numériques avec un séparateur de milliers (`#,##0` pour les entiers, `#,##0.00` pour les décimales — localisé par Excel).                                                                                                                                                                                                              |

## Exemples d’utilisation

### Plusieurs feuilles de calcul

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

Les onglets des feuilles de calcul apparaissent dans l’ordre du dictionnaire ; le premier onglet est coloré en orange RealmJoin, les onglets restants en gris neutre.

### Feuille de couverture, règles de surbrillance et barres de données

Le modèle complet de « classeur de rapport » avec une feuille de couverture d’informations, des colonnes d’état colorées et des barres de données dans les cellules :

```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 feuille de couverture est insérée comme premier onglet nommé « Info », avec la valeur `Title` sous forme de titre bleu marine au-dessus d’une ligne d’accent orange et toutes les autres clés sous forme de lignes étiquette/valeur.

### Texte de lien hypertexte convivial

Les colonnes URL sont cliquables par défaut et affichent l’URL brute. Mappez une colonne vers un texte d’affichage convivial pour conserver une table étroite :

```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' }
```

### Combinaison avec les assistants de livraison

Un modèle de bout en bout courant dans les runbooks de reporting — écrire le classeur, puis le joindre à un e-mail de rapport et/ou le téléverser afin d’obtenir un lien de téléchargement :

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

# Livraison par e-mail — le classeur compact est idéal comme pièce jointe de secours en cas de limite de taille
Send-RjRbReportEmail `
    -EmailFrom       $emailFrom `
    -EmailTo         $EmailTo `
    -Subject         "Rapport — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent $reportMd `
    -Attachments     @($xlsxPath)

# ...ou livraison vers le stockage avec un lien de téléchargement limité dans le temps
$uploaded = Publish-RjRbFilesToStorageContainer `
    -FilePaths          $xlsxPath `
    -ContainerName      'reports' `
    -ResourceGroupName  $ResourceGroupName `
    -StorageAccountName $StorageAccountName `
    -AddBlobNamePrefix  $true
```

Voir [Send-RjRbReportEmail](/fr/dev-reference/report-functions/send-rjrbreportemail.md) et [Publish-RjRbFilesToStorageContainer](/fr/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) pour la partie livraison de ce modèle.

## Gestion des types de cellules

| Valeur d’entrée                                                                  | Rendu comme                                                                                                                                                                           |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Types .NET entier/à virgule flottante/décimal                                    | Nombre Excel (éventuellement avec séparateur de milliers via `-UseThousandsSeparator`). `NaN`/`Infinity` reviennent au texte.                                                         |
| `[datetime]`                                                                     | Véritable date Excel ; les valeurs de date seule reçoivent un format de date, les valeurs avec composante horaire reçoivent un format date-heure. Localisé par le client d’affichage. |
| Chaînes de date ISO-8601 (`2026-07-16T08:00:00Z`, champs de date Graph typiques) | Analysées et rendues comme de véritables dates Excel triables.                                                                                                                        |
| `[bool]`                                                                         | Booléen Excel (`TRUE`/`FALSE`).                                                                                                                                                       |
| `http://` / `https://` Chaînes URL                                               | Lien hypertexte cliquable (supprimer avec `-NoHyperlink`; texte d’affichage via `-HyperlinkText`).                                                                                    |
| Tableaux / collections                                                           | Éléments joints avec `;` dans une cellule de texte.                                                                                                                                   |
| `$null` / `DBNull`                                                               | Cellule vide.                                                                                                                                                                         |
| Tout le reste                                                                    | Texte brut. Les espaces de début et de fin sont préservés ; les chaînes ne sont jamais réinterprétées comme des nombres ou des formules.                                              |

## Comportement et gestion des erreurs

### Noms des feuilles de calcul

Les noms des feuilles de calcul sont nettoyés pour respecter les règles d’Excel : les caractères non valides (`[ ] : * ? / \`) sont remplacés, les noms sont tronqués à 31 caractères, les noms vides deviennent `Sheet<n>`, et les doublons reçoivent un suffixe `_2`, `_3`, ….

### En-têtes de colonnes

Les noms d’en-tête proviennent de l’ordre des propriétés de l’objet de la première ligne. Les noms de propriétés vides deviennent `Column<n>`; les noms en double (insensibles à la casse) sont dédupliqués avec un suffixe `_2`, `_3`, …, car les colonnes de table Excel doivent être uniques et non vides.

### Feuilles de calcul vides

Une feuille de calcul dont l’ensemble de lignes est vide est tout de même écrite — elle contient une seule cellule « No data available » et aucune table. Un dictionnaire vide, en revanche, génère l’erreur `-Worksheets` dictionnaire, cependant, génère l’erreur `Export-RjRbXlsx: -Worksheets doit contenir au moins une entrée.`

### Limite de lignes

Excel limite les feuilles de calcul à 1 048 576 lignes. La fonction génère l’erreur `Export-RjRbXlsx: la feuille de calcul '<name>' contient <n> lignes - la limite xlsx est de 1048575 lignes de données.` avant d’écrire un fichier non valide. Répartissez les très grandes exportations sur plusieurs feuilles de calcul ou livrez-les plutôt en CSV.

### Règles de surbrillance

* Les règles qui référencent une colonne absente d’une feuille de calcul sont silencieusement ignorées pour cette feuille de calcul (elles s’appliquent toujours aux autres feuilles de calcul qui possèdent la colonne).
* Une valeur `Color` inconnue génère `Export-RjRbXlsx: couleur de surbrillance inconnue '<color>' - utilisez Green, Red ou Yellow. Règle ignorée.` sous forme d’avertissement et ignore uniquement cette règle.

### Largeurs de colonnes

Les largeurs sont calculées à partir de la longueur de l’en-tête et des 1 000 premières lignes de données (limitées entre 8 et 60 caractères), afin que les très grandes exportations ne ralentissent pas le calcul des largeurs.

### Fichier de sortie

Un fichier existant à l’emplacement `Chemin` est supprimé et recréé. La fonction ne crée pas les répertoires parents manquants — assurez-vous que le dossier cible existe (p. ex. `New-Item -ItemType Directory`).

## Sorties

La fonction ne retourne rien. Elle écrit le classeur dans `Chemin` et émet un message détaillé (`Export-RjRbXlsx: a écrit <n> feuille(s) de calcul dans <path>`) visible lorsque le runbook s’exécute avec `-Verbose` ou `$VerbosePreference = 'Continue'`.

## Voir aussi

* [Send-RjRbReportEmail](/fr/dev-reference/report-functions/send-rjrbreportemail.md) — livrer le classeur généré comme pièce jointe à un e-mail de rapport.
* [Publish-RjRbFilesToStorageContainer](/fr/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) — téléverser le classeur vers Azure Blob Storage et retourner un lien de téléchargement limité dans le temps.
* [Paramètres de rapport du runbook](/fr/automatisation/runbooks/runbook-report-settings.md) — configuration centralisée des canaux de livraison des rapports.
* Exemple d’utilisation dans un runbook de production : [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) — crée un classeur à plusieurs feuilles de calcul avec une feuille de couverture « 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/fr/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.
