# Esquema

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

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

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.2.0`

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

---

#### Package metadata

```json
{
  "mobile": true,
  "preset": [
    {
      "client": "@univerjs/preset-sheets-advanced",
      "locale": "@univerjs/preset-sheets-advanced/locales/en-US",
      "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/en-US",
      "style": "@univerjs-pro/sheets-outline-ui/lib/index.css"
    }
  ],
  "license": true,
  "server": false
}
```

La función de esquema (también conocida como agrupación o esquema de dimensiones) le permite agrupar filas o columnas en una hoja de trabajo. Esto es útil para organizar y resumir grandes conjuntos de datos mediante la creación de secciones plegables.

## Introducción

En Univer Sheets, la función de esquema le permite:

* **Agrupar filas o columnas**: crear grupos jerárquicos de filas o columnas para organizar datos.
* **Contraer y expandir grupos**: mostrar u ocultar filas o columnas agrupadas con un solo clic.
* **Anidado grupos**: cree múltiples niveles de grupos para jerarquías de datos complejas.

Los grupos de esquema se usan comúnmente en los siguientes escenarios:

* Resumen de datos detallados: agrupe filas detalladas debajo de filas de resumen para crear una vista más limpia.
* Organización de conjuntos de datos grandes: agrupe columnas o filas relacionadas para facilitar la navegación.
* Creación de informes plegables: permita a los usuarios expandir o contraer secciones de un informe según sea necesario.

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

## Complemento Modo

### Instalación

#### 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
```

### Uso

```typescript
import { UniverSheetsOutlinePlugin } from '@univerjs-pro/sheets-outline' // [!code ++]
import { UniverSheetsOutlineUIPlugin } from '@univerjs-pro/sheets-outline-ui' // [!code ++]
import SheetsOutlineUIEnUS from '@univerjs-pro/sheets-outline-ui/locale/en-US' // [!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.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      SheetsOutlineUIEnUS, // [!code ++]
    ),
  },
})

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

Si tiene una licencia comercial para Univer, consulte [Uso de la licencia en el cliente](https://docs.univer.ai/es-ES/server/license.md#in-plugin-mode) para la configuración.

## Compatibilidad móvil

Configure primero el [editor móvil](https://docs.univer.ai/es-ES/guides/sheets/getting-started/installation.md#mobile-support). En la inicialización en modo plugin de esta página, sustituya los registros de escritorio siguientes por las exportaciones móviles de los mismos paquetes **antes de abrir un documento**. Conserve modelos, estilos, traducciones e importaciones Facade; no registre ambas variantes.

| Paquete                           | Registro de escritorio        | Registro móvil                      |
| --------------------------------- | ----------------------------- | ----------------------------------- |
| `@univerjs-pro/sheets-outline-ui` | `UniverSheetsOutlineUIPlugin` | `UniverSheetsOutlineMobileUIPlugin` |

## Preestablecido Modo

La función de esquema está incluida en el ajuste preestablecido `@univerjs/preset-sheets-advanced`.

### Instalación

#### 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
```

### Uso

```typescript
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced' // [!code ++]
import UniverPresetSheetsAdvancedEnUS from '@univerjs/preset-sheets-advanced/locales/en-US' // [!code ++]
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US'
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.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      UniverPresetSheetsCoreEnUS,
      UniverPresetSheetsAdvancedEnUS, // [!code ++]
    ),
  },
  presets: [
    UniverSheetsCorePreset(),
    UniverSheetsAdvancedPreset(), // [!code ++]
  ],
})
```

Si tiene una licencia comercial de Univer, consulte [Uso de la licencia en el cliente](https://docs.univer.ai/es-ES/server/license.md#in-preset-mode) para la configuración.

## API de Facade

Las definiciones completas del tipo de API de Facade se pueden encontrar en [FacadeAPI](https://docs.univer.ai/es-ES/reference/facade/univer.md).

### Importación

> [!INFO: Plugin mode note]
> Solo el modo complemento requiere importar manualmente el paquete Facade. El modo preestablecido ya incluye el paquete Facade correspondiente, por lo que no se necesita ninguna importación adicional.

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

### Creación de contornos de filas

Puedes crear un grupo de contornos de filas usando la API de Facade:

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

// Group rows 2 to 6 (0-based index: startRow=1, numRows=5)
fWorksheet.addRowOutline(1, 5)
```

### Creación de contornos de columnas

Del mismo modo, puedes crear un grupo de contornos de columnas:

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

// Group columns B to E (0-based index: startColumn=1, numColumns=4)
fWorksheet.addColumnOutline(1, 4)
```

### Contracción y expansión de contornos

Puedes contraer o expandir un grupo de esquemas mediante programación:

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

const rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)
if (rowOutlines.length > 0) {
  // Collapse the first row outline group
  fWorksheet.setDimensionOutlineCollapsed(rowOutlines[0].id, true)

  // Expand it later
  fWorksheet.setDimensionOutlineCollapsed(rowOutlines[0].id, false)
}
```

### Eliminar Contornos

Puedes eliminar un grupo de esquemas específico por su 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)
}
```

### Borrar contornos en un rango

Puedes borrar todos los grupos de esquemas dentro de un rango específico:

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

// Remove all row outline groups fully contained in rows 2 to 10
fWorksheet.clearDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW, 1, 9)
```

### Consultar esquemas

Puedes recuperar todos los grupos de esquemas en una hoja de trabajo:

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

// Get all row outlines
const rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)
rowOutlines.forEach((outline) => {
  console.log(outline.id, outline.start, outline.end, outline.collapsed)
})

// Get all outlines (both row and column)
const allOutlines = fWorksheet.getDimensionOutlines()
```

## Estructura de datos del esquema

Cada grupo de esquemas tiene las siguientes propiedades:

| Propiedad   | Tipo                   | Descripción                                  |
| ----------- | ---------------------- | -------------------------------------------- |
| `id`        | `string`               | Identificador único para el grupo de esquema |
| `unitId`    | `string`               | El ID de la unidad del libro de trabajo      |
| `subUnitId` | `string`               | El ID de la hoja de cálculo                  |
| `axis`      | `DimensionOutlineAxis` | El eje del esquema (`row` o `column`)        |
| `start`     | `number`               | Índice inicial inclusivo de base cero        |
| `end`       | `number`               | Índice final inclusivo de base cero          |
| `collapsed` | `boolean`              | Si el grupo está colapsado actualmente       |

## Validación y errores

Al crear grupos de esquemas, lo siguiente se realizan validaciones:

* **Rango no válido**: el rango debe ser válido (no negativo, recuento distinto de cero).
* **Fuera de límites**: el rango debe estar dentro de los límites de la hoja de cálculo.
* **Grupos cruzados**: los grupos nuevos no pueden cruzar los grupos existentes.
* **Profundidad máxima**: existe una profundidad máxima de anidamiento para los grupos de esquema.

El rango para desagrupar debe contener completamente el rango del grupo de esquema; la validación fallará.

Si falla una validación, el comando no se ejecutará y se emitirá un error a través de `SheetsOutlineErrorService`.
