# 本文データ構造

- Human documentation: [https://docs.univer.ai/ja-JP/guides/docs/model/document-body](https://docs.univer.ai/ja-JP/guides/docs/model/document-body)

- Agent Markdown: [https://docs.univer.ai/ja-JP/guides/docs/model/document-body.md](https://docs.univer.ai/ja-JP/guides/docs/model/document-body.md)

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.1.0`

- Source: [docs/model/document-body.ja-JP.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/docs/model/document-body.ja-JP.mdx)

---

## IDocumentBody

`IDocumentBody` は Univer Docs ドキュメントの本文フローを保存します。

実際のテキストは `dataStream` に保存され、スタイルや構造情報は別の配列に保存されます。それらはテキストのインデックスによって関連付けられます。

### プロパティ

| プロパティ              | 型                        | 説明                                                        |
| ------------------ | ------------------------ | --------------------------------------------------------- |
| dataStream         | `string`                 | 本文のプレーンテキストストリーム。段落、セクション、テーブル、カスタムブロックは特殊文字で表現されます。      |
| textRuns?          | `ITextRun[]`             | インラインスタイル範囲。                                              |
| paragraphs?        | `IParagraph[]`           | 段落メタデータと段落スタイル。                                           |
| sectionBreaks?     | `ISectionBreak[]`        | セクション区切りのメタデータ。                                           |
| customBlocks?      | `ICustomBlock[]`         | プラグイン定義のブロックプレースホルダー。                                     |
| tables?            | `ICustomTable[]`         | 本文内のテーブルマーカー。テーブル定義は `IDocumentData.tableSource` に保存されます。 |
| columnGroups?      | `ICustomColumnGroup[]`   | カラムグループマーカー。                                              |
| blockRanges?       | `IDocumentBlockRange[]`  | callout、quote、code block などの構造化ブロック範囲。                    |
| customRanges?      | `ICustomRange[]`         | ハイパーリンク、フィールド、ブックマーク、コメント、mention、プラグイン定義範囲。              |
| customDecorations? | `ICustomDecoration[]`    | コメントハイライトなどの装飾範囲。                                         |
| payloads?          | `Record<string, string>` | コピー/ペースト時の一時データ。永続化されません。                                 |

### dataStream

`dataStream` は本文テキストのソースです。通常、段落は `\r\n` で終わります。

```typescript
const body: IDocumentBody = {
  dataStream: 'Title\r\nHello Univer\r\n',
  paragraphs: [
    { startIndex: 5, paragraphId: 'p-title' },
    { startIndex: 19, paragraphId: 'p-body' },
  ],
}
```

### 特殊文字

一部のドキュメント要素は `dataStream` 内の制御文字で表現され、レンダラーによって対応する要素に変換されます。

| 文字     | 意味               |
| ------ | ---------------- |
| `\r\n` | 段落区切り            |
| `\n`   | セクション区切り         |
| `\f`   | ページ区切り           |
| `\v`   | カラム区切り           |
| `\t`   | タブ               |
| `\0`   | ドキュメント終端         |
| `\b`   | カスタムブロックプレースホルダー |

テーブルやカスタム範囲も内部で制御文字を使用します。テーブル、リンク、コメント、ブロック機能を扱う場合は、制御文字を直接書くのではなく Facade API またはコマンドを使用してください。

## IDocumentData との関係

`IDocumentBody` は本文フローのみを保存します。外部リソースは `IDocumentData` に保存されます。

* `tableSource` はテーブル定義を保存します。
* `drawings` は画像や描画オブジェクトを保存します。
* `headers` と `footers` はそれぞれ独自の `IDocumentBody` を持ちます。
* `lists` は段落の箇条書きが参照するリスト定義を保存します。
* `resources` はプラグイン定義データを保存します。
