# 尋找與取代

- Human documentation: [https://docs.univer.ai/zh-TW/guides/sheets/features/find-replace](https://docs.univer.ai/zh-TW/guides/sheets/features/find-replace)

- Agent Markdown: [https://docs.univer.ai/zh-TW/guides/sheets/features/find-replace.md](https://docs.univer.ai/zh-TW/guides/sheets/features/find-replace.md)

- Requested language: `zh-TW`

- Content language: `zh-TW`

- Documentation version: `1.2.0`

- Source: [sheets/features/find-replace.zh-TW.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/features/find-replace.zh-TW.mdx)

---

#### Package metadata

```json
{
  "mobile": true,
  "preset": [
    {
      "client": "@univerjs/preset-sheets-find-replace",
      "locale": "@univerjs/preset-sheets-find-replace/locales/zh-TW",
      "style": "@univerjs/preset-sheets-find-replace/lib/index.css"
    }
  ],
  "plugins": [
    {
      "client": "@univerjs/find-replace",
      "locale": "@univerjs/find-replace/locale/zh-TW",
      "style": "@univerjs/find-replace/lib/index.css"
    },
    {
      "client": "@univerjs/sheets-find-replace",
      "facade": "@univerjs/sheets-find-replace/facade"
    }
  ],
  "server": false
}
```

查詢替換功能允許使用者在電子表格中快速查詢特定內容並進行替換，支援多種匹配方式和選項，幫助使用者高效處理資料。

可在下方完整外掛範例中開啟尋找與取代面板，體驗此功能。

> Interactive example: [Open the playground](/playground/sheets/basic-via-plugin)

## 外掛模式

### 安裝

#### npm

```bash
npm install @univerjs/find-replace @univerjs/sheets-find-replace
```

#### pnpm

```bash
pnpm add @univerjs/find-replace @univerjs/sheets-find-replace
```

#### yarn

```bash
yarn add @univerjs/find-replace @univerjs/sheets-find-replace
```

#### bun

```bash
bun add @univerjs/find-replace @univerjs/sheets-find-replace
```

### 使用

```typescript
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'
import { UniverFindReplacePlugin } from '@univerjs/find-replace' // [!code ++]
import FindReplaceZhTW from '@univerjs/find-replace/locale/zh-TW' // [!code ++]
import { UniverSheetsFindReplacePlugin } from '@univerjs/sheets-find-replace' // [!code ++]

import '@univerjs/find-replace/lib/index.css' // [!code ++]

import '@univerjs/sheets-find-replace/facade' // [!code ++]

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

univer.registerPlugin(UniverFindReplacePlugin) // [!code ++]
univer.registerPlugin(UniverSheetsFindReplacePlugin) // [!code ++]
```

## 行動裝置支援

先設定[行動版編輯器](https://docs.univer.ai/zh-TW/guides/sheets/getting-started/installation.md#mobile-support)。在本頁外掛模式的初始化程式碼中，將下列桌面版註冊替換為同一套件匯出的行動版外掛，並在**開啟文件前**完成。保留模型外掛、樣式、語言套件與 Facade 匯入，請勿同時註冊兩個版本。

| 套件                              | 桌面版註冊                           | 行動版註冊                                   |
| ------------------------------- | ------------------------------- | --------------------------------------- |
| `@univerjs/find-replace`        | `UniverFindReplacePlugin`       | `UniverFindReplaceMobileUIPlugin`       |
| `@univerjs/sheets-find-replace` | `UniverSheetsFindReplacePlugin` | `UniverSheetsFindReplaceMobileUIPlugin` |

## 預設模式

### 安裝

#### npm

```bash
npm install @univerjs/preset-sheets-find-replace
```

#### pnpm

```bash
pnpm add @univerjs/preset-sheets-find-replace
```

#### yarn

```bash
yarn add @univerjs/preset-sheets-find-replace
```

#### bun

```bash
bun add @univerjs/preset-sheets-find-replace
```

### 使用

```typescript
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreZhTW from '@univerjs/preset-sheets-core/locales/zh-TW'
import { UniverSheetsFindReplacePreset } from '@univerjs/preset-sheets-find-replace' // [!code ++]
import UniverPresetSheetsFindReplaceZhTW from '@univerjs/preset-sheets-find-replace/locales/zh-TW' // [!code ++]
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'

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

const { univerAPI } = createUniver({
  locale: LocaleType.ZH_TW,
  locales: {
    [LocaleType.ZH_TW]: mergeLocales(
      UniverPresetSheetsCoreZhTW,
      UniverPresetSheetsFindReplaceZhTW, // [!code ++]
    ),
  },
  presets: [
    UniverSheetsCorePreset(),
    UniverSheetsFindReplacePreset(), // [!code ++]
  ],
})
```

## Facade API

完整 Facade API 型別定義，請檢視 [FacadeAPI](https://docs.univer.ai/zh-TW/reference/facade/univer.md)

### 引入

> [!INFO: 外掛模式提示]
> 僅外掛模式需要手動引入 Facade 套件。預設模式已內建對應的 Facade 套件，無需額外引入。

```typescript
import '@univerjs/sheets-find-replace/facade'
```

### 建立文字查詢器

`univerAPI.createTextFinderAsync()` 建立一個文字查詢器，返回一個 `FTextFinder` 例項。

以下是 [`FTextFinder`](https://docs.univer.ai/zh-TW/reference/facade/text-finder.md) 上的一些成員方法：

| 方法                    | 描述                                                       |
| --------------------- | -------------------------------------------------------- |
| findAll               | 獲取當前表格中所有匹配的單元格，當前匹配的單元格是最後一個匹配的單元格                      |
| findNext              | 獲取當前表格中下一個匹配的單元格，如果存在則返回下一個匹配的單元格，並將當前匹配的單元格移動到下一個匹配的單元格 |
| findPrevious          | 獲取當前表格中上一個匹配的單元格，如果存在則返回上一個匹配的單元格，並將當前匹配的單元格移動到上一個匹配的單元格 |
| getCurrentMatch       | 獲取當前表格中當前匹配的單元格                                          |
| matchCaseAsync        | 設定匹配大小寫選項，如果為 true，則查詢操作將匹配大小寫，否則查詢操作將忽略大小寫              |
| matchEntireCellAsync  | 設定匹配整個單元格選項，如果為 true，則查詢操作將匹配整個單元格的值，否則查詢操作將匹配單元格值的一部分   |
| matchFormulaTextAsync | 設定匹配公式文字選項，如果為 true，則查詢操作將匹配公式文字，否則查詢操作將匹配值              |
| replaceAllWithAsync   | 替換所有匹配的文字為給定文字                                           |
| replaceWithAsync      | 替換當前匹配的文字為給定文字                                           |
| ensureCompleteAsync   | 確保查詢操作已完成。特別是噹噹前表格更改時，請使用此方法確保查詢操作已完成                    |

```typescript
// 假設當前表格是空表
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()

// 設定一些值到 A1:D10 範圍內
const fRange = fWorksheet.getRange('A1:D10')
fRange.setValues([
  [1, 2, 3, 4],
  [2, 3, 4, 5],
  [3, 4, 5, 6],
  [4, 5, 6, 7],
  [5, 6, 7, 8],
  [6, 7, 8, 9],
  [7, 8, 9, 10],
  [8, 9, 10, 11],
  [9, 10, 11, 12],
  [10, 11, 12, 13],
])

// 建立一個查詢文字 '5' 的查詢器
const textFinder = await univerAPI.createTextFinderAsync('5')

// 找到所有包含文字 '5' 的單元格
const matchCells = textFinder.findAll()
matchCells.forEach((cell) => {
  cell.getA1Notation() // D2, C3, B4, A5
})
```
