> 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 Standard-Helfer zum Erzeugen von Excel-Berichtsdateien (`.xlsx`) aus RealmJoin-Reporting-Runbooks. Es schreibt eine oder mehrere Tabellen von `PSCustomObject`s als eine **native Excel-Arbeitsmappe** ausschließlich mit .NET (`System.IO.Compression`) — kein `ImportExcel`, keine COM-Automatisierung, kein anderes externes Modul wird in der Automation-Umgebung benötigt.

{% hint style="warning" %}
**Noch nicht Teil von RealmJoin.RunbookHelper.** `Export-RjRbXlsx` wird noch nicht mit dem **RealmJoin.RunbookHelper** Modul — es wird mit der **nächsten Modulversion**. Bis dahin ist die Funktion inline in den Runbooks, die sie verwenden, dupliziert und kann von dort kopiert werden, zum Beispiel aus [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) (Bereich *Funktionsdefinitionen*).
{% endhint %}

Wesentliche Merkmale:

* **Keine Modulabhängigkeiten** — die Arbeitsmappe wird direkt als Open-XML-Paket über `System.IO.Compression.ZipArchive`zusammengefügt. Dies vermeidet sowohl die Cold-Start-Kosten schwergewichtiger Module als auch Assembly-Konflikte in gemischten Reporting-Runbooks.
* **Formatierte, direkt teilbare Ausgabe** — jedes Arbeitsblatt erhält eine formatierte Excel-Tabelle (marinefarbener Kopf, Zebra-Zeilen, die sich nach dem erneuten Sortieren anpassen, Filter-Dropdowns), eine fixierte Kopfzeile, berechnete Spaltenbreiten und eine automatische Druckeinrichtung (Ausrichtung aus der Inhaltsbreite abgeleitet, Kopfzeile auf jeder gedruckten Seite wiederholt). Der erste Registerkarten-Tab ist in RealmJoin-Orange gefärbt.
* **Typgetreue Zellen** — .NET-Zahlen werden zu Excel-Zahlen, `DateTime` Werte und ISO-8601-Strings (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 in Zahlen umgewandelt, und **Formel-Injection ist nicht möglich**.
* **Ein- oder mehrblättrig** — leiten Sie Zeilen in ein einzelnes Blatt oder übergeben Sie ein sortiertes Wörterbuch für eine Arbeitsmappe mit mehreren Arbeitsblättern plus optionalem "Info"-Deckblatt.
* **Integrierte Berichtsveredelung** — optionale Hervorhebungsregeln für bedingte Formatierung von Statusspalten, Datenbalken in Zellen für numerische Spalten, benutzerfreundlicher Anzeigetext für Hyperlinks und Tausendertrennzeichen.

Ein typischer Verbraucher ist ein geplantes Reporting-Runbook, das CSV- und XLSX-Dateien erzeugt und sie dann zustellt ü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 ist erforderlich — die Funktion arbeitet rein mit lokalen Daten und schreibt eine lokale Datei.

## Schnellstart

Der minimal sinnvolle 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, fixierter Kopfzeile, automatisch angepassten Spalten und Druckeinrichtung — bereit zum Anhängen an eine Bericht-E-Mail oder zum Hochladen in einen Speichercontainer.

## Parameter

### Parametersätze

Die Funktion hat zwei Parametersätze:

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

### Erforderlich

| Parameter | Typ            | Beschreibung                                                                                        |
| --------- | -------------- | --------------------------------------------------------------------------------------------------- |
| `Pfad`    | `Zeichenfolge` | 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 (Objektarray; auch über die Pipeline akzeptiert). Die Spaltenreihenfolge folgt der Eigenschaftsreihenfolge des ersten Objekts. Wörterbücher/Hashtables werden in Objekte umgewandelt. |
| `WorksheetName` | `Zeichenfolge` | `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 ein "Info"-Deckblatt (erster Tab): ein `Title` Schlüssel wird zur Überschrift, alle anderen Schlüssel werden zu Bezeichnungs-/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-Hervorhebungsvoreinstellungen). Regeln werden auf jedes Arbeitsblatt angewendet, das die genannte 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 existieren, werden übersprungen.                                                                                                           |
| `HyperlinkText`         | `IDictionary` | —        | Spaltenname → Anzeigetext für Hyperlink-Zellen, z. B. `@{ Portal = 'Open in Intune' }`. Die Zelle zeigt den benutzerfreundlichen Text, das Linkziel bleibt die vollständige URL. Spalten ohne Zuordnung zeigen weiterhin die URL.                                                                                             |
| `NoHyperlink`           | `Schalter`    | aus      | Konvertiere nicht `http/https` URL-Zeichenfolgen in anklickbare Hyperlinks.                                                                                                                                                                                                                                                   |
| `HideGridLines`         | `Schalter`    | aus      | Blende die Gitternetzlinien des Arbeitsblatts außerhalb der Tabelle aus (Gitternetzlinien werden standardmäßig aus Lesbarkeitsgründen beibehalten; das Deckblatt blendet sie immer aus).                                                                                                                                      |
| `UseThousandsSeparator` | `Schalter`    | aus      | Formatiere numerische Zellen mit einem Tausendertrennzeichen (`#,##0` für Ganzzahlen, `#,##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')
```

Die 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 Muster für eine "Berichtsarbeitsmappe" 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 namens "Info" eingefügt, wobei der `Title` Wert als marinefarbene Überschrift über einer orangefarbenen Akzentlinie und alle anderen Schlüssel als Bezeichnungs-/Wert-Zeilen erscheinen.

### Benutzerfreundlicher Hyperlink-Text

URL-Spalten sind standardmäßig anklickbar und zeigen die rohe URL. 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, dann an eine Bericht-E-Mail anhängen und/oder 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-Anlage bei Größenbeschränkung
Send-RjRbReportEmail `
    -EmailFrom       $emailFrom `
    -EmailTo         $EmailTo `
    -Subject         "Bericht — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent $reportMd `
    -Attachments     @($xlsxPath)

# ...oder Zustellung über Speicher 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` fällt auf Text zurück.                                           |
| `[datetime]`                                                                       | Echtes Excel-Datum; Werte nur mit Datum erhalten ein Datumsformat, Werte mit Zeitanteil erhalten ein Datum-Uhrzeit-Format. Lokalisiert durch den Anzeige-Client. |
| ISO-8601-Datumszeichenfolgen (`2026-07-16T08:00:00Z`, typische Graph-Datumsfelder) | Werden analysiert und als echte, sortierbare Excel-Datumswerte dargestellt.                                                                                      |
| `[bool]`                                                                           | Excel-Boolesch (`TRUE`/`FALSE`).                                                                                                                                 |
| `http://` / `https://` URL-Zeichenfolgen                                           | Anklickbarer Hyperlink (unterdrücken mit `-NoHyperlink`; Anzeigetext über `-HyperlinkText`).                                                                     |
| Arrays / Sammlungen                                                                | Elemente verbunden mit `;` zu einer Textzelle.                                                                                                                   |
| `$null` / `DBNull`                                                                 | Leere Zelle.                                                                                                                                                     |
| Alles andere                                                                       | Klartext. Voran- und nachgestellte Leerzeichen bleiben erhalten; Zeichenfolgen werden niemals erneut als Zahlen oder Formeln 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 ein `_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 Zeilenmenge leer ist, wird dennoch geschrieben — es enthält eine einzelne Zelle "No data available" und keine Tabelle. Ein leeres `-Worksheets` Wörterbuch wirft hingegen `Export-RjRbXlsx: -Worksheets muss mindestens einen Eintrag enthalten.`

### Zeilenlimit

Excel begrenzt Arbeitsblätter auf 1.048.576 Zeilen. Die Funktion löst `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 auf eine Spalte verweisen, 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

Die Breiten werden aus der Headerlänge und den ersten 1.000 Datenzeilen berechnet (auf 8 bis 60 Zeichen begrenzt), sodass sehr große Exporte bei der Breitenberechnung nicht langsamer werden.

### Ausgabedatei

Eine vorhandene Datei unter `Pfad` wird gelöscht und neu erstellt. Die Funktion erstellt fehlende übergeordnete Verzeichnisse nicht — stellen Sie sicher, dass der Zielordner existiert (z. B. `New-Item -ItemType Directory`).

## Ausgaben

Die Funktion gibt nichts zurück. Sie schreibt die Arbeitsmappe nach `Pfad` und gibt eine ausführliche Meldung aus (`Export-RjRbXlsx: schrieb <n> Arbeitsblatt/Arbeitsblätter nach <path>`) sichtbar, wenn das Runbook mit `-Verbose` oder `$VerbosePreference = 'Continue'`.

## Siehe auch

* [Send-RjRbReportEmail](/de/dev-reference/report-functions/send-rjrbreportemail.md) — die erzeugte Arbeitsmappe als Anhang einer Bericht-E-Mail zustellen.
* [Publish-RjRbFilesToStorageContainer](/de/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) — die Arbeitsmappe in Azure Blob Storage hochladen und einen zeitlich begrenzten Download-Link zurückgeben.
* [Runbook-Berichtseinstellungen](/de/automatisierung/runbooks/runbook-report-settings.md) — zentrale Konfiguration der Berichtszustellkanäle.
* Beispiel für die Inline-Verwendung: [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) — das Runbook, das die Funktion derzeit enthält, bis sie mit dem Modul ausgeliefert wird.


---

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