# Univer Docs API

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

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

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.1.0`

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

---

Univer Docs は Microsoft Word に近い概念で、プロフェッショナルな文書組版機能を提供します。

## インポート

```typescript
import '@univerjs/docs/facade'
import '@univerjs/docs-ui/facade'
```

## ドキュメント操作

ドキュメントユニットでは、`unitId` はドキュメントの一意識別子に対応し、ドキュメントには `subUnitId` はありません。

ドキュメントの本文は `body.dataStream` 文字列に保存され、ここにはスタイル情報は含まれません。

スタイル情報は別のデータ構造に保持され、インデックス参照で本文と関連付けられます。

改行、改ページ、セクション、段落、表などの要素は、本文内の特殊文字で表現され、レンダリング時に対応する要素へ変換されます。

> [!NOTE]
> ドキュメントデータ構造の設計について詳しく知りたい場合は、[Univer Document Architecture and Module
> Design](/blog/univer-doc-architecture) と [An Initial Exploration of Univer Document Typesetting
> Design](/blog/doc-typesetting-design) を参照してください。

### ドキュメントの作成

`univerAPI.createDocument(data)` で新しいドキュメントを作成し、対応する `FDocument` facade ラッパーを取得します。

引数は初期データを含む任意のドキュメントデータオブジェクトで、`{}` を渡すと空のドキュメントを作成します。

Facade API ではなく低レベルの `univer` インスタンスを直接使う場合は、`univer.createUnit(UniverInstanceType.UNIVER_DOC, data)` を使用します。

```typescript
// [!code word:data]
const doc = univerAPI.createDocument(data)
```

### ドキュメントの unitId を取得

```typescript
const doc = univerAPI.getActiveDocument()
const unitId = doc?.getId()
```

### ドキュメントデータを取得

```typescript
const doc = univerAPI.getActiveDocument()
const saveData = doc.save()
```

### ドキュメントを破棄

不要になったら Univer インスタンスの `dispose` を呼び出して破棄します。

```typescript
univer.dispose()
```

## テキスト操作

リッチテキスト領域のテキスト要素を編集します。

### テキストを挿入

末尾に指定したテキストを追加します。

```typescript
const doc = univerAPI.getActiveDocument()
doc?.insertText(0, 'Univer')
```

### テキストを削除

ドキュメントのオフセット範囲でテキストを削除します。

```typescript
const doc = univerAPI.getActiveDocument()
doc?.deleteRange({ startOffset: 0, endOffset: 1 })
```

## スタイルの変更

段落内のテキストスタイルを設定します。

```typescript
const doc = univerAPI.getActiveDocument()
const paragraph = doc?.getParagraphs()[0]

paragraph?.setStyle({
  textStyle: {
    cl: {
      rgb: '#FF0000',
    },
  },
})
```

## 改ページの挿入

`\f` 文字は改ページで、ドキュメントに改ページを挿入できます。

```typescript
const doc = univerAPI.getActiveDocument()
doc?.insertText(0, '\f')
```

## ドキュメント統計

基盤の `DocumentDataModel` を使って、ドキュメント全体または選択範囲の統計を計算できます。

```typescript
const doc = univerAPI.getActiveDocument()
if (!doc) throw new Error('No active document')

const statistics = await doc.getDocumentDataModel().getStatistics({
  locale: univerAPI.Enum.LocaleType.JA_JP,
})
console.log(statistics.words, statistics.charactersWithSpaces, statistics.paragraphs)
```

`getStatistics()` は単語数、文字数、段落数を返します。`ranges` で選択範囲だけを集計し、`signal` で不要になった計算を中止できます。
