> 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

Exportieren Sie Objekte aus Azure Automation-Runbooks in formatierte native Excel-Arbeitsmappen (.xlsx) ohne Abhängigkeiten von externen Modulen.

## Übersicht

`Export-RjRbXlsx` ist der Standard-Helfer zum Erzeugen von Excel-Berichtsdateien (`.xlsx`) aus RealmJoin-Reporting-Runbooks. Er schreibt eine oder mehrere Tabellen von `PSCustomObject`s als eine **native Excel-Arbeitsmappe** nur mit .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 mitführten, wurden entfernt. Runbooks, die sie verwenden, geben die Modulversion entsprechend an:

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

{% endhint %}

Wichtige Merkmale:

* **Keine Modulabhängigkeiten** — die Arbeitsmappe wird direkt als Open-XML-Paket zusammengestellt über `System.IO.Compression.ZipArchive`. Dadurch werden sowohl die Kaltstartkosten schwergewichtiger Module als auch Assembly-Konflikte in gemischten Reporting-Runbooks vermieden.
* **Formatiert, sofort teilbar** — jedes Arbeitsblatt erhält eine formatierte Excel-Tabelle (marinefarbener Kopf, Zebrastreifen-Zeilen, die sich beim erneuten Sortieren mitbewegen, Filter-Dropdowns), eine eingefrorene Kopfzeile, berechnete Spaltenbreiten und eine automatische Druckeinrichtung (Ausrichtung abgeleitet von der Inhaltsbreite, Kopfzeile auf jeder gedruckten Seite wiederholt). Der erste Arbeitsblatt-Tab ist in RealmJoin-Orange eingefärbt.
* **Typgetreue Zellen** — .NET-Zahlen werden zu Excel-Zahlen, `DateTime` Werte und ISO-8601-Strings (z. B. Graph-Datumsfelder) werden zu echten, sortierbaren Excel-Daten (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-Injektion ist nicht möglich**.
* **Mit einem oder mehreren Arbeitsblättern** — leiten Sie Zeilen in ein einzelnes Blatt, oder übergeben Sie ein geordnetes Dictionary für eine Arbeitsmappe mit mehreren Arbeitsblättern plus einem optionalen "Info"-Titelblatt.
* **Berichts-Feinschliff eingebaut** — optionale Hervorhebungsregeln per bedingter Formatierung für Statusspalten, Datenbalken in Zellen für numerische Spalten, freundlichen Anzeigetext für Hyperlinks und Tausendertrennzeichen.

Ein typischer Nutzer 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 Zeichenfolgenbildung). Keine Graph- oder Az-Verbindung ist 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'
```

Dadurch entsteht eine Arbeitsmappe mit einem einzelnen "Devices"-Arbeitsblatt: formatierte Tabelle mit Filter-Dropdowns, eingefrorener Kopfzeile, automatisch angepassten Spalten und Druckeinrichtung — bereit, an eine Bericht-E-Mail angehängt oder in einen Storage-Container hochgeladen zu werden.

## 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 Dictionary)                      | 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 (Array von Objekten; auch über die Pipeline akzeptiert). Die Spaltenreihenfolge folgt der Eigenschaftenreihenfolge des ersten Objekts. Dictionaries/Hashtables werden in Objekte umgewandelt.                                                         |
| `WorksheetName`  | `Zeichenfolge` | `SingleSheet` | Name des einzelnen Arbeitsblatts, höchstens 31 Zeichen (siehe [Arbeitsblattnamen](#worksheet-names)). Standard: `Bericht`.                                                                                                                                                         |
| `Arbeitsblätter` | `IDictionary`  | `MultiSheet`  | Geordnetes Dictionary von Arbeitsblattname → Zeilen, z. B. `([ordered]@{ 'Summary' = $summary; 'Details' = $details })`. Muss mindestens einen Eintrag enthalten. Schlüssel sind Arbeitsblattnamen mit jeweils höchstens 31 Zeichen (siehe [Arbeitsblattnamen](#worksheet-names)). |

### Optional — Inhalt & Formatierung

| Parameter               | Typ           | Standard | Beschreibung                                                                                                                                                                                                                                                                                                                                |
| ----------------------- | ------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Titelblatt`            | `IDictionary` | —        | Geordnetes Dictionary, dargestellt als "Info"-Titelblatt (erster Tab): eine `Titel` 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' })`.                                                   |
| `Hervorhebungsregeln`   | `object[]`    | —        | Bedingte Formatierung für Statusspalten. Array von Hashtables mit `Spalte` (Spaltenname), `Wert` (exakter Zelltext, unabhängig von Groß-/Kleinschreibung) und `Farbe` (`Grün`, `Rot` oder `Gelb` — die klassischen Excel-Hervorhebungs-Voreinstellungen). Regeln werden auf jedem Arbeitsblatt angewendet, das die genannte Spalte enthält. |
| `Datenbalkenspalten`    | `object[]`    | —        | Numerische Spaltennamen, die einen Datenbalken in der Zelle erhalten (orange, Farbverlauf 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 freundlichen Text, das Linkziel bleibt die vollständige URL. Spalten ohne Zuordnung zeigen weiterhin die URL.                                                                                                                   |
| `NoHyperlink`           | `Schalter`    | aus      | Konvertieren Sie `http/https` URL-Zeichenfolgen nicht in anklickbare Hyperlinks.                                                                                                                                                                                                                                                            |
| `HideGridLines`         | `Schalter`    | aus      | Blendet die Gitternetzlinien des Arbeitsblatts außerhalb der Tabelle aus (Gitternetzlinien bleiben standardmäßig aus Lesbarkeitsgründen sichtbar; das Titelblatt blendet sie immer aus).                                                                                                                                                    |
| `UseThousandsSeparator` | `Schalter`    | aus      | Formatieren Sie numerische Zellen mit einem Tausendertrennzeichen (`#,##0` für Ganzzahlen, `#,##0.00` für Dezimalzahlen — von Excel lokalisiert).                                                                                                                                                                                           |

## Verwendungsbeispiele

### Mehrere Arbeitsblätter

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

Die Arbeitsblattregisterkarten erscheinen in der Reihenfolge des Dictionaries; der erste Tab ist in RealmJoin-Orange eingefärbt, die übrigen Tabs neutral grau.

### Titelblatt, Hervorhebungsregeln und Datenbalken

Das vollständige Muster für die "Berichtsarbeitsmappe" mit einem Info-Titelblatt, 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 Titelblatt wird als erster Tab mit dem Namen "Info" eingefügt, wobei der `Titel` Wert als marinefarbene Überschrift über einer orangefarbenen Akzentlinie angezeigt wird und alle anderen Schlüssel als Beschriftungs-/Wert-Zeilen.

### Freundlicher Hyperlink-Text

URL-Spalten sind standardmäßig anklickbar und zeigen die rohe URL an. Ordnen Sie einer Spalte einen freundlichen 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 eignet sich ideal als Fallback-Anlage bei Größenbeschränkungen
Send-RjRbReportEmail `
    -EmailFrom       $emailFrom `
    -EmailTo         $EmailTo `
    -Subject         "Bericht — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent $reportMd `
    -Attachments     @($xlsxPath)

# ...oder Zustellung über Storage 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                                                                        | Gerendert als                                                                                                                                                       |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| .NET-Ganzzahl-/Fließkomma-/Dezimaltypen                                            | Excel-Zahl (optional mit Tausendertrennzeichen über `-UseThousandsSeparator`). `NaN`/`Infinity` werden als Text behandelt.                                          |
| `[datetime]`                                                                       | Echte Excel-Datumsangabe; Werte nur mit Datum erhalten ein Datumsformat, Werte mit Zeitanteil 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-Daten gerendert.                                                                                                    |
| `[bool]`                                                                           | Excel-Boolean (`TRUE`/`FALSE`).                                                                                                                                     |
| `http://` / `https://` URL-Zeichenfolgen                                           | Anklickbarer Hyperlink (unterdrücken mit `-NoHyperlink`; Anzeigetext über `-HyperlinkText`).                                                                        |
| Arrays / Sammlungen                                                                | Elemente zusammengeführt mit `;` in eine einzelne Textzelle.                                                                                                        |
| `$null` / `DBNull`                                                                 | Leere Zelle.                                                                                                                                                        |
| Alles andere                                                                       | Reiner Text. Führende/nachgestellte Leerzeichen bleiben erhalten; Zeichenfolgen werden niemals als Zahlen oder Formeln neu interpretiert.                           |

## Verhalten & Fehlerbehandlung

### Arbeitsblattnamen

Arbeitsblattnamen werden bereinigt, um 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.

{% hint style="warning" %}
**Halten Sie Arbeitsblattnamen auf höchstens 31 Zeichen.** Dies gilt für `-WorksheetName` und für die Schlüssel von `-Worksheets`, einschließlich zur Laufzeit eingefügter Werte. Längere Namen werden stillschweigend gekürzt, wodurch der aussagekräftige Teil des Namens abgeschnitten werden oder zwei Namen identisch werden können (der zweite erhält dann ein `_2` Suffix). Wählen Sie kurze, aussagekräftige Namen ohne `\ / ? * [ ] :`, und verwenden Sie denselben Namen wie den passenden Tabellentitel im Runbook's [Ausgabedaten](/de/dev-reference/runbook-output-data.md#naming-a-table) Tab, wo Export nach Excel bei Titeln mit mehr als 31 Zeichen fehlschlägt.
{% endhint %}

### Spaltenüberschriften

Die Kopfzeilennamen stammen aus der Eigenschaftenreihenfolge des ersten Zeilenobjekts. Leere Eigenschaftsnamen werden zu `Column<n>`; doppelte Namen (ohne Berücksichtigung der Groß-/Kleinschreibung) werden mit einem `_2`, `_3` , …-Suffix entdoppelt, da Excel-Tabellenspalten eindeutig und nicht leer sein müssen.

### Leere Arbeitsblätter

Ein Arbeitsblatt mit leerem Zeilenbestand wird dennoch geschrieben — es enthält eine einzelne Zelle "Keine Daten verfügbar" und keine Tabelle. Ein leeres `-Worksheets` Dictionary wirft jedoch `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.

### Hervorhebungsregeln

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

### Spaltenbreiten

Die Breiten werden aus der Länge der Kopfzeile und den ersten 1.000 Datenzeilen berechnet (begrenzt auf 8 bis 60 Zeichen), sodass sehr große Exporte durch die Breitenberechnung nicht verlangsamt werden.

### Ausgabedatei

Eine vorhandene Datei unter `Pfad` wird gelöscht und neu erstellt. Die Funktion erstellt keine fehlenden übergeordneten Verzeichnisse — stellen Sie sicher, dass der Zielordner existiert (e. g. `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: <n> Arbeitsblatt/Arbeitsblätter nach <path> geschrieben`), die sichtbar ist, 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-Berichteinstellungen](/de/automatisierung/runbooks/runbook-report-settings.md) — zentrale Konfiguration der Berichtszustellkanäle.
* Beispielverwendung in einem produktiven 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"-Titelblatt.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
