# アウトライン

- Human documentation: [https://docs.univer.ai/ja-JP/guides/sheets/features/outline](https://docs.univer.ai/ja-JP/guides/sheets/features/outline)

- Agent Markdown: [https://docs.univer.ai/ja-JP/guides/sheets/features/outline.md](https://docs.univer.ai/ja-JP/guides/sheets/features/outline.md)

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.1.0`

- Source: [sheets/features/outline.ja-JP.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/features/outline.ja-JP.mdx)

---

#### Package metadata

```json
{
  "mobile": true,
  "preset": [
    {
      "client": "@univerjs/preset-sheets-advanced",
      "locale": "@univerjs/preset-sheets-advanced/locales/ja-JP",
      "style": "@univerjs/preset-sheets-advanced/lib/index.css"
    }
  ],
  "plugins": [
    {
      "client": "@univerjs-pro/sheets-outline",
      "facade": "@univerjs-pro/sheets-outline/facade"
    },
    {
      "client": "@univerjs-pro/sheets-outline-ui",
      "locale": "@univerjs-pro/sheets-outline-ui/locale/ja-JP",
      "style": "@univerjs-pro/sheets-outline-ui/lib/index.css"
    }
  ],
  "license": true,
  "server": false
}
```

アウトライン機能（グループ化またはディメンションアウトラインとも呼ばれます）を使用すると、ワークシート内の行または列をグループ化できます。これは、折りたたみ可能なセクションを作成することで、大量のデータを整理および要約するのに役立ちます。

## はじめに

Univer Sheets では、アウトライン機能を使用すると以下が可能です：

* **行または列のグループ化**：行または列の階層グループを作成してデータを整理します。
* **グループの折りたたみと展開**：クリック一つでグループ化された行または列を表示または非表示にします。
* **ネストされたグループ**：複雑なデータ階層に対して複数レベルのグループを作成します。

アウトライン機能は、通常以下のシナリオで使用されます：

* 詳細データの要約：詳細な行を集計行の下にグループ化して、よりクリーンなビューを作成します。
* 大規模データセットの整理：関連する列や行をまとめて、ナビゲーションを容易にします。
* 折りたたみ可能なレポートの作成：ユーザーが必要に応じてレポートのセクションを展開または折りたためるようにします。

> Interactive example: [Open the playground](/playground/sheets/outline)

## プラグインモード

### インストール

#### npm

```bash
npm install @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-ui
```

#### pnpm

```bash
pnpm add @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-ui
```

#### yarn

```bash
yarn add @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-ui
```

#### bun

```bash
bun add @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-ui
```

### 使用方法

```typescript
import { UniverSheetsOutlinePlugin } from '@univerjs-pro/sheets-outline' // [!code ++]
import { UniverSheetsOutlineUIPlugin } from '@univerjs-pro/sheets-outline-ui' // [!code ++]
import SheetsOutlineUIJaJP from '@univerjs-pro/sheets-outline-ui/locale/ja-JP' // [!code ++]
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'

import '@univerjs-pro/sheets-outline/facade' // [!code ++]

import '@univerjs-pro/sheets-outline-ui/lib/index.css' // [!code ++]

const univer = new Univer({
  locale: LocaleType.JA_JP,
  locales: {
    [LocaleType.JA_JP]: mergeLocales(
      SheetsOutlineUIJaJP, // [!code ++]
    ),
  },
})

univer.registerPlugin(UniverSheetsOutlinePlugin)
univer.registerPlugin(UniverSheetsOutlineUIPlugin)
```

Univer の商用ライセンスをお持ちの場合は、[クライアントでのライセンス使用](https://docs.univer.ai/ja-JP/server/license.md#in-plugin-mode)を参照して設定してください。

## モバイル対応

まず[モバイルエディター](https://docs.univer.ai/ja-JP/guides/sheets/getting-started/installation.md#mobile-support)を設定します。このページのプラグインモードの初期化コードで、以下のデスクトップ登録を同じパッケージのモバイル版に置き換え、**文書を開く前に**完了してください。モデル、スタイル、言語ファイル、Facade は維持し、両方を同時に登録しないでください。

| パッケージ                             | デスクトップの登録                     | モバイルの登録                             |
| --------------------------------- | ----------------------------- | ----------------------------------- |
| `@univerjs-pro/sheets-outline-ui` | `UniverSheetsOutlineUIPlugin` | `UniverSheetsOutlineMobileUIPlugin` |

## プリセットモード

アウトライン機能は `@univerjs/preset-sheets-advanced` プリセットに含まれています。

### インストール

#### npm

```bash
npm install @univerjs/preset-sheets-advanced
```

#### pnpm

```bash
pnpm add @univerjs/preset-sheets-advanced
```

#### yarn

```bash
yarn add @univerjs/preset-sheets-advanced
```

#### bun

```bash
bun add @univerjs/preset-sheets-advanced
```

### 使用方法

```typescript
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced' // [!code ++]
import UniverPresetSheetsAdvancedJaJP from '@univerjs/preset-sheets-advanced/locales/ja-JP' // [!code ++]
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreJaJP from '@univerjs/preset-sheets-core/locales/ja-JP'
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'

import '@univerjs/preset-sheets-core/lib/index.css'
import '@univerjs/preset-sheets-advanced/lib/index.css' // [!code ++]

const { univerAPI } = createUniver({
  locale: LocaleType.JA_JP,
  locales: {
    [LocaleType.JA_JP]: mergeLocales(
      UniverPresetSheetsCoreJaJP,
      UniverPresetSheetsAdvancedJaJP, // [!code ++]
    ),
  },
  presets: [
    UniverSheetsCorePreset(),
    UniverSheetsAdvancedPreset(), // [!code ++]
  ],
})
```

Univer の商用ライセンスをお持ちの場合は、[クライアントでのライセンス使用](https://docs.univer.ai/ja-JP/server/license.md#in-preset-mode)を参照して設定してください。

## Facade API

完全な Facade API の型定義は [FacadeAPI](https://docs.univer.ai/ja-JP/reference/facade/univer.md) を参照してください。

### インポート

> [!INFO: プラグインモード注意]
> Facade パッケージの手動 import が必要なのはプラグインモードのみです。プリセットモードには対応する Facade パッケージが内蔵されているため、追加の import は不要です。

```typescript
import '@univerjs-pro/sheets-outline/facade'
```

### 行アウトラインの作成

Facade API を使用して行アウトライングループを作成できます：

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()

// 2〜6行目をグループ化（0ベースのインデックス：startRow=1, numRows=5）
fWorksheet.addRowOutline(1, 5)
```

### 列アウトラインの作成

同様に、列アウトライングループを作成できます：

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()

// B〜E列をグループ化（0ベースのインデックス：startColumn=1, numColumns=4）
fWorksheet.addColumnOutline(1, 4)
```

### アウトラインの折りたたみと展開

プログラムでアウトライングループを折りたたんだり展開したりできます：

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()

const rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)
if (rowOutlines.length > 0) {
  // 最初の行アウトライングループを折りたたむ
  fWorksheet.setDimensionOutlineCollapsed(rowOutlines[0].id, true)

  // 後で展開する
  fWorksheet.setDimensionOutlineCollapsed(rowOutlines[0].id, false)
}
```

### アウトラインの削除

ID を指定して特定のアウトライングループを削除できます：

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()

const rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)
if (rowOutlines.length > 0) {
  fWorksheet.removeDimensionOutline(rowOutlines[0].id)
}
```

### 範囲内のアウトラインをクリア

特定の範囲内のすべてのアウトライングループをクリアできます：

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()

// 2〜10行目の範囲内に完全に含まれるすべての行アウトラインを削除
fWorksheet.clearDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW, 1, 9)
```

### アウトラインのクエリ

ワークシート上のすべてのアウトライングループを取得できます：

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()

// すべての行アウトラインを取得
const rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)
rowOutlines.forEach((outline) => {
  console.log(outline.id, outline.start, outline.end, outline.collapsed)
})

// すべてのアウトライン（行と列の両方）を取得
const allOutlines = fWorksheet.getDimensionOutlines()
```

## アウトラインデータ構造

各アウトライングループには以下のプロパティがあります：

| プロパティ       | 型                      | 説明                           |
| ----------- | ---------------------- | ---------------------------- |
| `id`        | `string`               | アウトライングループの一意の識別子            |
| `unitId`    | `string`               | ワークブックのユニットID                |
| `subUnitId` | `string`               | ワークシートのシートID                 |
| `axis`      | `DimensionOutlineAxis` | アウトラインの軸（`row` または `column`） |
| `start`     | `number`               | 0ベースの包含開始インデックス              |
| `end`       | `number`               | 0ベースの包含終了インデックス              |
| `collapsed` | `boolean`              | グループが現在折りたたまれているかどうか         |

## 検証とエラー

アウトライングループの作成時には、以下の検証が実行されます：

* **無効な範囲**：範囲は有効である必要があります（負でない、ゼロでないカウント）。
* **境界外**：範囲はワークシートの境界内である必要があります。
* **交差グループ**：新しいグループは既存のグループと交差できません。
* **最大深度**：アウトライングループには最大ネスト深度があります。

グループ解除の範囲は、グループ化された範囲を完全に含んでいる必要があります。そうでない場合、検証に失敗します。

検証に失敗した場合、コマンドは実行されず、エラーは `SheetsOutlineErrorService` を通じて発行されます。
