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

# Export-RjRbXlsx

## 概要

`Export-RjRbXlsx` は、RealmJoin の reporting runbooks から Excel レポート ファイル（`.xlsx`）を生成するための標準ヘルパーです。1 つ以上の `PSCustomObject` の複数を 1 つの **ネイティブな Excel ブック** として、.NET のみ（`System.IO.Compression`）を使って書き込みます。— `ImportExcel`は不要で、COM オートメーションも不要、Automation 環境では他の外部モジュールも必要ありません。

{% hint style="info" %}
**RealmJoin.RunbookHelper 0.8.8 から利用できます。** この関数はモジュールからエクスポートされます。以前の runbook バージョンに含まれていたインライン複製は削除されました。これを使用する runbook では、モジュール バージョンを次のように宣言します:

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

{% endhint %}

主な特長:

* **モジュール依存関係ゼロ** — ブックは `System.IO.Compression.ZipArchive`を介して Open XML パッケージとして直接組み立てられます。これにより、重量級モジュールのコールドスタート コストと、複数の reporting runbook が混在する環境でのアセンブリ競合の両方を回避できます。
* **スタイル適用済みで、そのまま共有できる出力** — 各ワークシートには、スタイル付きの Excel テーブル（紺色のヘッダー、並べ替え後も追従するゼブラ行、フィルターのドロップダウン）、固定されたヘッダー行、計算された列幅、そして自動の印刷設定（内容の幅から向きが決まり、ヘッダー行は各印刷ページで繰り返されます）が適用されます。最初のワークシート タブは RealmJoin オレンジで色付けされます。
* **型を忠実に反映するセル** — .NET の数値は Excel の数値になり、 `DateTime` の値と ISO-8601 文字列（例: Graph の日付フィールド）は、実際に並べ替え可能な Excel 日付になり（クライアントによりローカライズされます）、 `http/https` URL はクリック可能なハイパーリンクになります。その他の文字列はすべてテキストのままです — シリアル番号や IMEI のような値が数値に変換されることは決してなく、 **数式インジェクションは不可能です**.
* **単一または複数ワークシート** — 行を 1 つのシートにパイプするか、順序付きディクショナリを渡して、複数のワークシートと任意の "Info" カバー シートを持つブックにします。
* **レポートの仕上げを内蔵** — ステータス列向けの条件付き書式ハイライト ルール、数値列向けのセル内データバー、見やすいハイパーリンク表示テキスト、桁区切り記号のオプションを備えています。

典型的な利用者は、CSV と XLSX ファイルを生成し、その後 [Send-RjRbReportEmail](/ja/dev-reference/report-functions/send-rjrbreportemail.md) および/または [Publish-RjRbFilesToStorageContainer](/ja/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md).

## 前提条件

PowerShell 自体以外はありません。この関数は、すべての Azure Automation ランタイムで利用可能な .NET 型のみを使用します（`System.IO.Compression`, `System.Text`, `System.Xml`を使わない文字列構築）。Graph や Az の接続は不要です — この関数はローカル データのみで動作し、ローカル ファイルを書き込みます。

## クイック スタート

最小限の呼び出しは、行を関数にパイプし、出力パスを指定します:

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

これにより、単一の "Devices" ワークシートを持つブックが作成されます。フィルターのドロップダウン付きのスタイル適用済みテーブル、固定ヘッダー行、自動サイズの列、および印刷設定を備え、レポートメールへの添付やストレージ コンテナーへのアップロードにすぐ使えます。

## パラメーター

### パラメーター セット

この関数には 2 つのパラメーター セットがあります:

| パラメーター セット         | 入力                                             | 使用例                             |
| ------------------ | ---------------------------------------------- | ------------------------------- |
| `SingleSheet` （既定） | `-InputObject` （パイプライン経由でも可）+ `-WorksheetName` | 1 つのテーブル、1 つのワークシート。            |
| `MultiSheet`       | `-Worksheets` （順序付きディクショナリ）                    | 1 つのブックに、複数のワークシートとしていくつかのテーブル。 |

### 必須

| パラメーター | 型        | 説明                                            |
| ------ | -------- | --------------------------------------------- |
| `Path` | `string` | 作成する `.xlsx` ファイルのフル パス。 **既存のファイルは上書きされます。** |

### データ入力

| パラメーター          | 型             | パラメーター セット    | 説明                                                                                                                  |
| --------------- | ------------- | ------------- | ------------------------------------------------------------------------------------------------------------------- |
| `InputObject`   | `object[]`    | `SingleSheet` | エクスポートする行（オブジェクト配列。パイプライン経由でも受け付けます）。列の順序は最初のオブジェクトのプロパティ順に従います。ディクショナリ / ハッシュテーブルはオブジェクトに変換されます。                   |
| `WorksheetName` | `string`      | `SingleSheet` | 単一ワークシートの名前。既定: `Report`.                                                                                           |
| `Worksheets`    | `IDictionary` | `MultiSheet`  | ワークシート名 → 行 の順序付きディクショナリ。例: `([ordered]@{ 'Summary' = $summary; 'Details' = $details })`。少なくとも 1 件のエントリを含める必要があります。 |

### 任意 — コンテンツと書式設定

| パラメーター                  | 型             | 既定 | 説明                                                                                                                                                                                                  |
| ----------------------- | ------------- | -- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CoverSheet`            | `IDictionary` | —  | 順序付きディクショナリは "Info" カバー ワークシート（最初のタブ）としてレンダリングされます: a `Title` キーが見出しになり、他のすべてのキーがラベル/値の行になります。例: `([ordered]@{ Title = 'Device Report'; Tenant = 'contoso'; Generated = '2026-07-16 08:00 UTC' })`. |
| `HighlightRules`        | `object[]`    | —  | ステータス列の条件付き書式。次を含むハッシュテーブルの配列: `Column` （ヘッダー名）、 `Value` （セルの正確なテキスト、大文字小文字は区別しません）および `Color` (`Green`, `Red` または `Yellow` — Excel の定番ハイライト プリセットです）。ルールは、指定された列を含むすべてのワークシートに適用されます。              |
| `DataBarColumns`        | `object[]`    | —  | セル内データバー（オレンジ、最小値から最大値へのグラデーション）が付く数値列名。例: `@('DeviceCount')`。存在しない列は、そのワークシートではスキップされます。                                                                                                           |
| `HyperlinkText`         | `IDictionary` | —  | 列名 → ハイパーリンク セルの表示テキスト。例: `@{ Portal = 'Open in Intune' }`。セルには親しみやすいテキストが表示され、リンク先は完全な URL のままです。対応付けのない列は URL をそのまま表示します。                                                                         |
| `NoHyperlink`           | `スイッチ`        | オフ | 変換しない `http/https` URL 文字列をクリック可能なハイパーリンクに。                                                                                                                                                         |
| `HideGridLines`         | `スイッチ`        | オフ | 読みやすさのため、既定ではグリッド線は保持されますが、テーブル外のワークシートのグリッド線を非表示にします（カバー シートでは常に非表示です）。                                                                                                                            |
| `UseThousandsSeparator` | `スイッチ`        | オフ | 数値セルを桁区切り記号（`#,##0` 整数では `#,##0.00` 、小数では                                                                                                                                                           |

## （Excel によりローカライズされます）で書式設定します。

### 複数ワークシート

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

ワークシート タブはディクショナリ順に表示されます。最初のタブは RealmJoin オレンジで色付けされ、残りのタブはニュートラルなグレーです。

### カバー シート、ハイライト ルール、データバー

情報カバー シート、色付きのステータス列、セル内データバーを含む完全な "レポート ブック" パターン:

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

カバー シートは、"Info" という名前の最初のタブとして挿入され、 `Title` 値はオレンジのアクセント ライン上にある紺色の見出しとして表示され、他のすべてのキーはラベル/値の行になります。

### 親しみやすいハイパーリンク テキスト

URL 列は既定でクリック可能で、生の URL を表示します。テーブルを細く保つには、列を親しみやすい表示テキストにマッピングします:

```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 = 'Intune で開く' }
```

### 配信ヘルパーとの組み合わせ

reporting runbook でよくあるエンドツーエンドのパターン — ブックを書き込み、その後、レポート メールに添付するか、ダウンロード リンク用にアップロードします:

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

# メール配信 — コンパクトなブックは、サイズ制限時のフォールバック添付として理想的です
Send-RjRbReportEmail `
    -EmailFrom       $emailFrom `
    -EmailTo         $EmailTo `
    -Subject         "レポート — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent $reportMd `
    -Attachments     @($xlsxPath)

# ...または、期限付きダウンロード リンクでのストレージ配信
$uploaded = Publish-RjRbFilesToStorageContainer `
    -FilePaths          $xlsxPath `
    -ContainerName      'reports' `
    -ResourceGroupName  $ResourceGroupName `
    -StorageAccountName $StorageAccountName `
    -AddBlobNamePrefix  $true
```

参照 [Send-RjRbReportEmail](/ja/dev-reference/report-functions/send-rjrbreportemail.md) および [Publish-RjRbFilesToStorageContainer](/ja/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) このパターンの配信側について。

## セル型の処理

| 入力値                                                        | としてレンダリングされます                                                                  |
| ---------------------------------------------------------- | ------------------------------------------------------------------------------ |
| .NET の整数/浮動小数点/decimal 型                                   | Excel の数値（必要に応じて `-UseThousandsSeparator`). `NaN`/`Infinity` はテキストにフォールバックします。 |
| `[datetime]`                                               | 実際の Excel 日付。日付のみの値は日付書式になり、時刻を含む値は日時書式になります。表示クライアントによりローカライズされます。            |
| ISO-8601 の日付文字列（`2026-07-16T08:00:00Z`、Graph の一般的な日付フィールド） | は解析され、並べ替え可能な実際の Excel 日付としてレンダリングされます。                                        |
| `[bool]`                                                   | Excel のブール値（`TRUE`/`FALSE`).                                                   |
| `http://` / `https://` URL 文字列                             | クリック可能なハイパーリンク（次で抑制: `-NoHyperlink`; 表示テキストは `-HyperlinkText`).                |
| 配列 / コレクション                                                | 項目は `;` で結合され、1 つのテキスト セルになります。                                                |
| `$null` / `DBNull`                                         | 空のセル。                                                                          |
| その他すべて                                                     | プレーン テキスト。先頭/末尾の空白は保持され、文字列が数値や数式として再解釈されることはありません。                            |

## 動作とエラー処理

### ワークシート名

ワークシート名は Excel のルールに合わせて正規化されます。無効な文字（`[ ] : * ? / \`）は置換され、名前は 31 文字に切り詰められ、空の名前は `Sheet<n>`になり、重複には `_2`, `_3`、… のサフィックスが付きます。

### 列ヘッダー

ヘッダー名は最初の行オブジェクトのプロパティ順から取得されます。空のプロパティ名は `Column<n>`になり、重複名（大文字小文字を区別しない）は `_2`, `_3`、… のサフィックスを付けて重複排除されます。Excel テーブルの列は一意で空でない必要があるためです。

### 空のワークシート

行セットが空のワークシートでも書き込まれます — そこには "No data available" のセルが 1 つあり、テーブルはありません。ただし空の `-Worksheets` ディクショナリは `Export-RjRbXlsx: -Worksheets には少なくとも 1 件のエントリが必要です。`

### 行数の上限

Excel ではワークシートあたり 1,048,576 行が上限です。この関数は `Export-RjRbXlsx: worksheet '<name>' has <n> rows - the xlsx limit is 1048575 data rows.` を出力する前に無効なファイルを防ぐために例外をスローします。非常に大きなエクスポートは複数のワークシートに分割するか、代わりに CSV として配信してください。

### ハイライト ルール

* 存在しない列を参照するルールは、そのワークシートでは静かにスキップされます（その列を持つ他のワークシートには引き続き適用されます）。
* 不明な `Color` 値は `Export-RjRbXlsx: unknown highlight color '<color>' - use Green, Red or Yellow. Skipping rule.` を警告として出力し、そのルールだけをスキップします。

### 列幅

幅はヘッダー長と最初の 1,000 行のデータから計算され（8 文字から 60 文字の範囲にクランプされます）、非常に大きなエクスポートでも幅計算で遅くなりません。

### 出力ファイル

既存の `Path` は削除され、再作成されます。この関数は不足している親ディレクトリを作成しません — 目的のフォルダーが存在することを確認してください（例: `New-Item -ItemType Directory`).

## 出力

この関数は何も返しません。ブックを `Path` に書き込み、verbose メッセージ（`Export-RjRbXlsx: wrote <n> worksheet(s) to <path>`）を出力します。runbook が `-Verbose` または `$VerbosePreference = 'Continue'`.

## 参考

* [Send-RjRbReportEmail](/ja/dev-reference/report-functions/send-rjrbreportemail.md) — 生成されたブックをレポート メールの添付ファイルとして配信します。
* [Publish-RjRbFilesToStorageContainer](/ja/dev-reference/report-functions/publish-rjrbfilestostoragecontainer.md) — ブックを Azure Blob Storage にアップロードし、期限付きダウンロード リンクを返します。
* [Runbook Report Settings](/ja/zi-dong-hua/runbooks/runbook-report-settings.md) — レポート配信チャネルの中央設定。
* 本番 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) — "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/ja/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.
