# インポートとエクスポート

- Human documentation: [https://docs.univer.ai/ja-JP/guides/bases/features/import-export](https://docs.univer.ai/ja-JP/guides/bases/features/import-export)

- Agent Markdown: [https://docs.univer.ai/ja-JP/guides/bases/features/import-export.md](https://docs.univer.ai/ja-JP/guides/bases/features/import-export.md)

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.2.0`

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

---

#### Package metadata

```json
{
  "preset": [],
  "plugins": [
    {
      "client": "@univerjs-pro/exchange-client",
      "facade": "@univerjs-pro/exchange-client/facade"
    },
    {
      "client": "@univerjs-pro/bases-exchange-client",
      "facade": "@univerjs-pro/bases-exchange-client/facade"
    }
  ],
  "license": true,
  "server": true
}
```

Bases は **XLSX、XLS、CSV、TSV** のインポートと、**XLSX、CSV、TSV** のエクスポートに対応します。例えば、Excel の顧客一覧を取り込み、フィールドとビューを追加して、テーブルのデータを書き出せます。

これらの API には変換用のバックエンドが必要です。[ファイル交換の統合](https://docs.univer.ai/ja-JP/server/import-export.md)から始め、バックエンドが Bases ドキュメントと必要な形式に対応することを確認してください。

## 対応形式

以下は、このページで説明するブラウザー API の対応形式です。Office ファイル変換には、同じドキュメント種別と形式を扱えるバックエンドが必要です。

| インポート                           | エクスポート                  |
| ------------------------------- | ----------------------- |
| `.xls`, `.xlsx`, `.csv`, `.tsv` | `.xlsx`, `.csv`, `.tsv` |

CSV と TSV は 1 つのテーブルを出力し、`tableId` で対象を選びます。これらのテキスト形式はビュー、権限、その他の Base リソースを保持しません。完全なバックアップには Base スナップショットを使ってください。

## インストールと登録

[初期化済みの Bases エディター](https://docs.univer.ai/ja-JP/guides/bases/getting-started/installation.md)に以下を追加します。

#### npm

```bash
npm install @univerjs-pro/exchange-client @univerjs-pro/bases-exchange-client
```

#### pnpm

```bash
pnpm add @univerjs-pro/exchange-client @univerjs-pro/bases-exchange-client
```

#### yarn

```bash
yarn add @univerjs-pro/exchange-client @univerjs-pro/bases-exchange-client
```

#### bun

```bash
bun add @univerjs-pro/exchange-client @univerjs-pro/bases-exchange-client
```

```ts
import { UniverBasesExchangeClientPlugin } from '@univerjs-pro/bases-exchange-client'
import { UniverExchangeClientPlugin } from '@univerjs-pro/exchange-client'

import '@univerjs-pro/bases/facade'
import '@univerjs-pro/bases-exchange-client/facade'
import '@univerjs-pro/exchange-client/facade'

univer.registerPlugin(UniverExchangeClientPlugin, exchangeConfig)
univer.registerPlugin(UniverBasesExchangeClientPlugin)
```

`exchangeConfig` はアップロード、変換、タスク照会、ダウンロードの設定です。[統合ガイド](https://docs.univer.ai/ja-JP/server/import-export.md)に従って用意してください。

## ページで編集するためにインポートする

`file` はユーザーが選択した `File` またはリモートファイルの URL です。返されるスナップショットはエディターが読み込める Base データです。

```ts
const snapshot = await univerAPI.importBaseToSnapshotAsync(file)
if (snapshot) {
  univerAPI.createBase(snapshot)
}
```

スナップショットのインポートに共同編集は不要ですが、サーバー側の変換は必要です。後から作業を再開できるようにするには、[スナップショットの保存と復元](https://docs.univer.ai/ja-JP/guides/bases/model/base-snapshot.md)に従い `base.save()` の結果を保存します。

## ファイルのエクスポート

現在の Base を Excel として書き出します。

```ts
import { ExchangeFormat } from '@univerjs-pro/exchange-client'

const base = univerAPI.getActiveBase()
if (!base) throw new Error('Open a Base first')

const file = await univerAPI.exportBaseBySnapshotAsync(base.save(), ExchangeFormat.XLSX)
if (file) {
  univerAPI.downloadFile(file, 'database', ExchangeFormat.XLSX)
}
```

CSV と TSV は 1 つのテーブルを表します。複数のテーブルを持つ Base から出力する場合は `tableId` を明示してください。

```ts
const table = base.getTables()[0]
if (!table) throw new Error('Create a table first')

const file = await univerAPI.exportBaseBySnapshotAsync(
  base.save(),
  ExchangeFormat.CSV,
  table.getId(),
)
if (file) {
  univerAPI.downloadFile(file, table.getName(), ExchangeFormat.CSV)
}
```

TSV には `ExchangeFormat.CSV` を `ExchangeFormat.TSV` に置き換えます。ファイル出力はテーブルデータの交換用です。完全なバックアップには Base スナップショットを保存してください。CSV はビュー、権限、その他のリソースを保持しません。

## 共同編集ドキュメントのインポート

[Bases の共同編集](https://docs.univer.ai/ja-JP/guides/bases/features/collaboration.md)を接続してからインポートし、サーバーが返したドキュメント ID を読み込みます。

```ts
import '@univerjs-pro/collaboration-client/facade'

const unitId = await univerAPI.importBaseToUnitIdAsync(file)
if (unitId) {
  await univerAPI.getCollaboration().loadBaseAsync(unitId)
}
```

サーバーのドキュメントは `exportBaseByUnitIdAsync(unitId, format, tableId?)` で出力します。ブラウザーの未送信の編集内容が同期されるのを待ってから実行してください。

## Excel の構造と数式

Bases 交換プラグインの設定で変換動作を変更できます。次はデフォルト値です。先ほどの登録の代わりに使用してください。

```ts
import {
  ExchangeBaseExportMode,
  ExchangeBaseFormulaPolicy,
  ExchangeBaseImportMode,
} from '@univerjs-pro/exchange-client'

univer.registerPlugin(UniverBasesExchangeClientPlugin, {
  importSourceMode: ExchangeBaseImportMode.AUTO,
  importFormulaPolicy: ExchangeBaseFormulaPolicy.CONVERT_THEN_VALUES,
  exportStructureMode: ExchangeBaseExportMode.TABLES,
  exportFormulaPolicy: ExchangeBaseFormulaPolicy.FAIL,
})
```

* インポート元：`AUTO` は Excel テーブルと表示中のワークシートを自動選択します。`TABLES` は Excel テーブルのみ、`SHEETS` は表示中のワークシート、`HYBRID` は Excel テーブルと Excel テーブルを含まない表示中のワークシートを取り込みます。
* 出力構造：`TABLES` は空でない Base テーブルをネイティブの Excel テーブルにし、空のテーブルは通常の範囲にします。`RANGES` はすべて通常のワークシート範囲として出力します。
* 数式：インポートでは変換を試み、未対応の数式にはキャッシュ結果を使います。エクスポートはデフォルトで変換の成功を必要とします。`VALUES` はキャッシュ結果のみ、`TEXT` は元の数式をテキストとして保持します。エクスポートの `CONVERT_THEN_VALUES` でも、数式を変換できなければ失敗します。

実際の業務ファイルでフィールドと数式の変換を確認してください。これらのメソッドは `undefined` を返す場合も、リクエストや変換のエラーを投げる場合もあります。UI で両方を処理してください。

## 組み込みのインポート・エクスポートメニューと UI 操作の削除

Univer の組み込みインポート・エクスポートメニューと UI 操作は削除されました。基盤となるサービスと Facade API は引き続き利用できます。

既存のインポート・エクスポートメニューと UI 操作が必要な場合は、[組み込みインポート・エクスポートメニューと UI 操作の移行例](https://office.univer.ai/showcase/bases/custom-import-export)を参考に、カスタムプラグインで移行できます。サンプルの完全なソースコードは、オンラインで閲覧・ダウンロードできます。
