> 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

Azure Automation runbook からオブジェクトを、外部モジュール依存なしでスタイル付きのネイティブ Excel ブック (.xlsx) にエクスポートします。

## 概要

`Export-RjRbXlsx` は、Excel レポート ファイル（`.xlsx`）を RealmJoin のレポート runbook から生成するための標準ヘルパーです。1 つ以上の表を `PSCustomObject`を **ネイティブな 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 %}

主な特徴:

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

典型的な利用者は、CSV および XLSX ファイルを生成し、その後それらを次の方法で配信するスケジュール済みレポート runbook です: [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 つのブック内の別々のワークシートとして出力します。 |

### 必須

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

### データ入力

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

### 任意 — 内容

| パラメーター                  | 型             | 既定 | 説明                                                                                                                                                                                         |
| ----------------------- | ------------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CoverSheet`            | `IDictionary` | —  | 順序付きディクショナリを「Info」カバー ワークシート（最初のタブ）としてレンダリングします。 `Title` キーが見出しになり、他のすべてのキーはラベル/値の行になります。例: `([ordered]@{ Title = 'デバイス レポート'; Tenant = 'contoso'; Generated = '2026-07-16 08:00 UTC' })`. |
| `HighlightRules`        | `object[]`    | —  | 状態列用の条件付き書式。以下の値を持つハッシュテーブル配列: `Column` （ヘッダー名）、 `Value` （セルの正確なテキスト、大小文字は区別しない）および `Color` (`Green`, `Red` または `Yellow` — という標準的な Excel のハイライト プリセット）。ルールは、指定した列を含むすべてのワークシートに適用されます。     |
| `DataBarColumns`        | `object[]`    | —  | セル内データバー（オレンジ、最小から最大へのグラデーション）が付く数値列名。例: `@('DeviceCount')`。ワークシートに存在しない列はスキップされます。                                                                                                        |
| `HyperlinkText`         | `IDictionary` | —  | 列名 → ハイパーリンク セルの表示テキスト。例: `@{ Portal = '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             = 'デバイス レポート'
    'Tenant'          = $tenantDisplayName
    'Generated (UTC)' = (Get-Date).ToUniversalTime().ToString('yyyy-MM-dd HH:mm')
    'Runbook バージョン' = $Version
    'デバイス合計'   = "$($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 で開く' }
```

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

レポート 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`という接尾辞が付きます。

{% hint style="warning" %}
**ワークシート名は 31 文字以下にしてください。** これは `-WorksheetName` と `-Worksheets`のキーに適用されます。実行時に挿入される値も含まれます。長い名前は警告なしで切り詰められるため、名前の意味のある部分が切れたり、2 つの名前が同一になったりすることがあります（後者には `_2` という接尾辞が付きます）。短く意味のある名前を使い、 `\ / ? * [ ] :`を含めないでください。また、runbook の [Output Data](/ja/dev-reference/runbook-output-data.md#naming-a-table) タブでは、31 文字を超えるタイトルに対して Excel へのエクスポートが失敗するため、対応するテーブルタイトルと同じ名前を使用してください。
{% endhint %}

### 列ヘッダー

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

### 空のワークシート

行セットが空のワークシートでも書き込まれます — 単一の「No data available」セルが含まれ、テーブルは作成されません。空の `-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: 不明なハイライト色 '<color>' - Green、Red、Yellow のいずれかを使用してください。ルールをスキップします。` 警告として出力され、そのルールのみをスキップします。

### 列幅

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

### 出力ファイル

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

## 出力

この関数は何も返しません。ブックを `パス` に書き込み、詳細メッセージ（`Export-RjRbXlsx: <n> 個のワークシートを <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 レポート設定](/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 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/ja/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.
