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

# Export-RjRbXlsx

## Überblick

`Export-RjRbXlsx` ist der Standardhelfer zum Erzeugen von Excel-Berichtsdateien (`.xlsx`) aus RealmJoin-Reporting-Runbooks. Er schreibt eine oder mehrere Tabellen von `PSCustomObject`s als eine **native Excel-Arbeitsmappe** mit ausschließlich .NET (`System.IO.Compression`) — kein `ImportExcel`, keine COM-Automatisierung, kein anderes externes Modul ist in der Automation-Umgebung erforderlich.

{% hint style="info" %}
**Verfügbar ab RealmJoin.RunbookHelper 0.8.8.** Die Funktion wird vom Modul exportiert; die eingebetteten Kopien, die frühere Runbook-Versionen enthielten, wurden entfernt. Runbooks, die sie verwenden, deklarieren die Modulversion entsprechend:

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

{% endhint %}

Wichtige Merkmale:

* **Keine Modulabhängigkeiten** — die Arbeitsmappe wird direkt als Open XML-Paket über `System.IO.Compression.ZipArchive`zusammengestellt. Dadurch entfallen sowohl die Kaltstartkosten schwergewichtiger Module als auch Assembly-Konflikte in gemischten Reporting-Runbooks.
* **Stilvolle, sofort teilbare Ausgabe** — jedes Arbeitsblatt erhält eine formatierte Excel-Tabelle (marineblauer Kopf, Zebra-Zeilen, die beim erneuten Sortieren erhalten bleiben, Filter-Dropdowns), eine eingefrorene Kopfzeile, berechnete Spaltenbreiten und eine automatische Druckeinrichtung (Ausrichtung aus der Inhaltsbreite abgeleitet, Kopfzeile auf jeder gedruckten Seite wiederholt). Der erste Arbeitsblatt-Tab ist in RealmJoin-Orange gefärbt.
* **Typgetreue Zellen** — .NET-Zahlen werden zu Excel-Zahlen, `DateTime` Werte und ISO-8601-Zeichenfolgen (z. B. Graph-Datumsfelder) werden zu echten, sortierbaren Excel-Datumswerten (vom Client lokalisiert), und `http/https` URLs werden zu anklickbaren Hyperlinks. Alle anderen Zeichenfolgen bleiben Text — Werte wie Seriennummern oder IMEIs werden niemals zu Zahlen konvertiert, und **Formeleinschleusung ist nicht möglich**.
* **Einzel- oder mehrere Arbeitsblätter** — leiten Sie Zeilen in ein einzelnes Blatt oder übergeben Sie ein geordnetes Wörterbuch für eine Arbeitsmappe mit mehreren Arbeitsblättern plus optionalem "Info"-Deckblatt.
* **Integrierte Berichtsfeinheiten** — optionale Hervorhebungsregeln für bedingte Formatierung für Statusspalten, Datenbalken in Zellen für numerische Spalten, benutzerfreundlichen Hyperlink-Anzeigetext und Tausendertrennzeichen.

Ein typischer Verbraucher ist ein geplantes Reporting-Runbook, das CSV- und XLSX-Dateien erzeugt und sie dann über [Send-RjRbReportEmail](/de/dev-reference/report-functions/send-rjrbreportemail.md) und/oder [Publish-RjRbFilesToStorageContainer](/de/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md).

## Voraussetzungen

Keine außer PowerShell selbst. Die Funktion verwendet nur .NET-Typen, die in jeder Azure Automation-Laufzeit verfügbar sind (`System.IO.Compression`, `System.Text`, `System.Xml`-freie Zeichenfolgen-Erzeugung). Keine Graph- oder Az-Verbindung erforderlich — die Funktion arbeitet ausschließlich mit lokalen Daten und schreibt eine lokale Datei.

## Schnellstart

Der minimal funktionsfähige Aufruf leitet die Zeilen in die Funktion und gibt den Ausgabepfad an:

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

Dies erzeugt eine Arbeitsmappe mit einem einzelnen "Devices"-Arbeitsblatt: formatierte Tabelle mit Filter-Dropdowns, eingefrorener Kopfzeile, automatisch angepassten Spalten und Druckeinrichtung — bereit zum Anhängen an eine Berichts-E-Mail oder zum Hochladen in einen Storage-Container.

## Parameter

### Parametersätze

Die Funktion hat zwei Parametersätze:

| Parametersatz            | Eingabe                                                | Anwendungsfall                                                      |
| ------------------------ | ------------------------------------------------------ | ------------------------------------------------------------------- |
| `SingleSheet` (standard) | `-InputObject` (auch über Pipeline) + `-WorksheetName` | Eine Tabelle, ein Arbeitsblatt.                                     |
| `MultiSheet`             | `-Worksheets` (geordnetes Wörterbuch)                  | Mehrere Tabellen als separate Arbeitsblätter in einer Arbeitsmappe. |

### Erforderlich

| Parameter | Typ      | Beschreibung                                                                                        |
| --------- | -------- | --------------------------------------------------------------------------------------------------- |
| `Path`    | `string` | Vollständiger Pfad der `.xlsx` zu erstellenden Datei. **Eine vorhandene Datei wird überschrieben.** |

### Dateneingabe

| Parameter       | Typ           | Parametersatz | Beschreibung                                                                                                                                                                                                          |
| --------------- | ------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `InputObject`   | `object[]`    | `SingleSheet` | Die zu exportierenden Zeilen (Array von Objekten; auch über Pipeline akzeptiert). Die Spaltenreihenfolge folgt der Eigenschaftsreihenfolge des ersten Objekts. Wörterbücher/Hashtables werden in Objekte umgewandelt. |
| `WorksheetName` | `string`      | `SingleSheet` | Name des einzelnen Arbeitsblatts. Standard: `Report`.                                                                                                                                                                 |
| `Worksheets`    | `IDictionary` | `MultiSheet`  | Geordnetes Wörterbuch von Arbeitsblattname → Zeilen, z. B. `([ordered]@{ 'Summary' = $summary; 'Details' = $details })`. Muss mindestens einen Eintrag enthalten.                                                     |

### Optional — Inhalt & Formatierung

| Parameter               | Typ           | Standard | Beschreibung                                                                                                                                                                                                                                                                                                          |
| ----------------------- | ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CoverSheet`            | `IDictionary` | —        | Geordnetes Wörterbuch, dargestellt als "Info"-Deckblatt-Arbeitsblatt (erster Tab): ein `Title` -Schlüssel wird zur Überschrift, alle anderen Schlüssel werden zu Beschriftungs-/Wert-Zeilen, z. B. `([ordered]@{ Title = 'Device Report'; Tenant = 'contoso'; Generated = '2026-07-16 08:00 UTC' })`.                 |
| `HighlightRules`        | `object[]`    | —        | Bedingte Formatierung für Statusspalten. Array von Hashtables mit `Column` (Spaltenname), `Value` (exakter Zelltext, nicht case-sensitiv) und `Color` (`Green`, `Red` oder `Yellow` — die klassischen Excel-Hervorhebungs-Presets). Regeln werden auf jedes Arbeitsblatt angewendet, das die benannte Spalte enthält. |
| `DataBarColumns`        | `object[]`    | —        | Numerische Spaltennamen, die einen Datenbalken in der Zelle erhalten (orange, Verlauf von Minimum zu Maximum), z. B. `@('DeviceCount')`. Spalten, die auf einem Arbeitsblatt nicht vorhanden sind, werden übersprungen.                                                                                               |
| `HyperlinkText`         | `IDictionary` | —        | Spaltenname → Anzeigetext für Hyperlink-Zellen, z. B. `@{ Portal = 'Open in Intune' }`. Die Zelle zeigt den freundlichen Text, das Linkziel bleibt die vollständige URL. Spalten ohne Zuordnung zeigen weiterhin die URL an.                                                                                          |
| `NoHyperlink`           | `Schalter`    | aus      | Nicht konvertieren `http/https` URL-Zeichenfolgen in anklickbare Hyperlinks.                                                                                                                                                                                                                                          |
| `HideGridLines`         | `Schalter`    | aus      | Blenden Sie die Gitternetzlinien des Arbeitsblatts außerhalb der Tabelle aus (Gitternetzlinien bleiben standardmäßig aus Lesbarkeitsgründen erhalten; das Deckblatt blendet sie immer aus).                                                                                                                           |
| `UseThousandsSeparator` | `Schalter`    | aus      | Formatieren Sie numerische Zellen mit einem Tausendertrennzeichen (`#,##0` für ganze Zahlen, `#,##0.00` für Dezimalzahlen — von Excel lokalisiert).                                                                                                                                                                   |

## Anwendungsbeispiele

### Mehrere Arbeitsblätter

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

Arbeitsblatt-Tabs erscheinen in Wörterbuchreihenfolge; der erste Tab ist in RealmJoin-Orange gefärbt, die übrigen Tabs in neutralem Grau.

### Deckblatt, Hervorhebungsregeln und Datenbalken

Das vollständige "Berichts-Arbeitsmappen"-Muster mit einem Info-Deckblatt, farbigen Statusspalten und Datenbalken in Zellen:

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

Das Deckblatt wird als erster Tab mit dem Namen "Info" eingefügt, wobei der `Title` Wert als marineblaue Überschrift über einer orangefarbenen Akzentlinie steht und alle anderen Schlüssel als Beschriftungs-/Wert-Zeilen.

### Benutzerfreundlicher Hyperlinktext

URL-Spalten sind standardmäßig anklickbar und zeigen die rohe URL an. Ordnen Sie einer Spalte einen benutzerfreundlichen Anzeigetext zu, um die Tabelle schmal zu halten:

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

### Kombination mit den Zustellhilfen

Ein gängiges End-to-End-Muster in Reporting-Runbooks — die Arbeitsmappe schreiben, sie dann an eine Bericht-E-Mail anhängen und/oder sie für einen Download-Link hochladen:

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

# E-Mail-Zustellung — die kompakte Arbeitsmappe ist ideal als Fallback-Anhang bei Größenbeschränkungen
Send-RjRbReportEmail `
    -EmailFrom       $emailFrom `
    -EmailTo         $EmailTo `
    -Subject         "Bericht — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent $reportMd `
    -Attachments     @($xlsxPath)

# ...oder Storage-Zustellung mit einem zeitlich begrenzten Download-Link
$uploaded = Publish-RjRbFilesToStorageContainer `
    -FilePaths          $xlsxPath `
    -ContainerName      'reports' `
    -ResourceGroupName  $ResourceGroupName `
    -StorageAccountName $StorageAccountName `
    -AddBlobNamePrefix  $true
```

Siehe [Send-RjRbReportEmail](/de/dev-reference/report-functions/send-rjrbreportemail.md) und [Publish-RjRbFilesToStorageContainer](/de/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) für die Zustellseite dieses Musters.

## Behandlung von Zelltypen

| Eingabewert                                                                        | Dargestellt als                                                                                                                                                            |
| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| .NET-Ganzzahl-/Fließkomma-/Dezimaltypen                                            | Excel-Zahl (optional mit Tausendertrennzeichen über `-UseThousandsSeparator`). `NaN`/`Infinity` werden als Text behandelt.                                                 |
| `[datetime]`                                                                       | Echte Excel-Datumsangabe; reine Datumswerte erhalten ein Datumsformat, Werte mit Zeitanteil erhalten ein Datum/Uhrzeit-Format. Lokalisierung durch den anzeigenden Client. |
| ISO-8601-Datumszeichenfolgen (`2026-07-16T08:00:00Z`, typische Graph-Datumsfelder) | werden geparst und als echte, sortierbare Excel-Datumswerte dargestellt.                                                                                                   |
| `[bool]`                                                                           | Excel-Boolean (`TRUE`/`FALSE`).                                                                                                                                            |
| `http://` / `https://` URL-Zeichenfolgen                                           | Anklickbarer Hyperlink (unterdrücken mit `-NoHyperlink`; Anzeigetext über `-HyperlinkText`).                                                                               |
| Arrays / Sammlungen                                                                | Elemente mit `;` zu einer Textzelle zusammengeführt.                                                                                                                       |
| `$null` / `DBNull`                                                                 | Leere Zelle.                                                                                                                                                               |
| Alles andere                                                                       | Einfacher Text. Führende/nachgestellte Leerzeichen werden beibehalten; Zeichenfolgen werden niemals als Zahlen oder Formeln neu interpretiert.                             |

## Verhalten & Fehlerbehandlung

### Arbeitsblattnamen

Arbeitsblattnamen werden bereinigt, um den Excel-Regeln zu entsprechen: ungültige Zeichen (`[ ] : * ? / \\`) werden ersetzt, Namen werden auf 31 Zeichen gekürzt, leere Namen werden zu `Sheet<n>`und Duplikate erhalten einen `_2`, `_3`, …-Suffix.

### Spaltenüberschriften

Die Überschriftennamen stammen aus der Eigenschaftsreihenfolge des ersten Zeilenobjekts. Leere Eigenschaftsnamen werden zu `Column<n>`; doppelte Namen (nicht case-sensitiv) werden mit einem `_2`, `_3`, …-Suffix dedupliziert, da Excel-Tabellenspalten eindeutig und nicht leer sein müssen.

### Leere Arbeitsblätter

Ein Arbeitsblatt, dessen Zeilensatz leer ist, wird dennoch geschrieben — es enthält eine einzelne Zelle "Keine Daten verfügbar" und keine Tabelle. Ein leeres `-Worksheets` Wörterbuch `Export-RjRbXlsx: -Worksheets muss mindestens einen Eintrag enthalten.`

### Zeilenlimit

Excel begrenzt Arbeitsblätter auf 1.048.576 Zeilen. Die Funktion wirft `Export-RjRbXlsx: Arbeitsblatt '<name>' hat <n> Zeilen - das xlsx-Limit beträgt 1048575 Datenzeilen.` bevor eine ungültige Datei geschrieben wird. Teilen Sie sehr große Exporte auf mehrere Arbeitsblätter auf oder liefern Sie sie stattdessen als CSV aus.

### Hervorhebungsregeln

* Regeln, die eine Spalte referenzieren, die auf einem Arbeitsblatt nicht existiert, werden für dieses Arbeitsblatt stillschweigend übersprungen (sie gelten weiterhin für andere Arbeitsblätter, die die Spalte haben).
* Ein unbekannter `Color` Wert gibt `Export-RjRbXlsx: unbekannte Hervorhebungsfarbe '<color>' - verwenden Sie Green, Red oder Yellow. Regel wird übersprungen.` als Warnung aus und überspringt nur diese Regel.

### Spaltenbreiten

Breiten werden anhand der Überschriftenlänge und der ersten 1.000 Datenzeilen berechnet (auf zwischen 8 und 60 Zeichen begrenzt), damit sehr große Exporte die Breitenberechnung nicht verlangsamen.

### Ausgabedatei

Eine vorhandene Datei unter `Path` wird gelöscht und neu erstellt. Die Funktion erstellt keine fehlenden übergeordneten Verzeichnisse — stellen Sie sicher, dass der Zielordner vorhanden ist (z. B. `New-Item -ItemType Directory`).

## Outputs

Die Funktion gibt nichts zurück. Sie schreibt die Arbeitsmappe nach `Path` und gibt eine ausführliche Meldung aus (`Export-RjRbXlsx: schrieb <n> Arbeitsblatt(e) nach <path>`), `-Verbose` oder `$VerbosePreference = 'Continue'`.

## Siehe auch

* [Send-RjRbReportEmail](/de/dev-reference/report-functions/send-rjrbreportemail.md) — liefert die erzeugte Arbeitsmappe als Anhang einer Berichts-E-Mail aus.
* [Publish-RjRbFilesToStorageContainer](/de/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) — lädt die Arbeitsmappe in Azure Blob Storage hoch und gibt einen zeitlich begrenzten Download-Link zurück.
* [Runbook-Berichtseinstellungen](/de/automatisierung/runbooks/runbook-report-settings.md) — zentrale Konfiguration der Berichtszustellkanäle.
* Beispielverwendung in einem Produktions-Runbook: [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) — erstellt eine Arbeitsmappe mit mehreren Arbeitsblättern und einem "Info"-Deckblatt.


---

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