---
title: "Блок «Таблица» — объединение ячеек, вставка из Excel"
description: "Таблицы с объединёнными ячейками, полноценным контентом внутри ячейки и вставкой из Excel, Google Docs и Notion."
source: https://blokeditor.com/ru/docs/table/
lastmod: 2026-09-07
---

Фреймворк JavaScript

Блочные инструменты Таблица

# Таблица: объединённые ячейки и контент ячеек

Полнофункциональный блок таблицы. Каждая ячейка содержит собственный редактор блоков (любой тип блока, кроме `header`, `table` и `column_list` — они всегда запрещены внутри ячеек). Поддерживаются объединение и разделение ячеек (`colspan`/`rowspan`, перекрытые ячейки записываются как `mergedInto`), строки заголовков, столбцы заголовков, изменение ширины столбцов, цвет фона и текста ячеек, элементы управления для добавления и удаления строк и столбцов, копирование и вставка, а также переключение плотности текста (компактная или комфортная) в меню настроек блока.

### Импорт

TypeScript

```
import { Table } from '@bloklabs/core/tools';
```

### Конфигурация

| Опция | Тип | По умолчанию | Описание |
| --- | --- | --- | --- |
| `rows` | `number` | `3` | Начальное количество строк при вставке новой таблицы. |
| `cols` | `number` | `3` | Начальное количество столбцов при вставке новой таблицы. |
| `withHeadings` | `boolean` | `false` | Оформлять ли первую строку как строку заголовков по умолчанию. |
| `withHeadingColumn` | `boolean` | `false` | Оформлять ли первый столбец как столбец заголовков по умолчанию. |
| `stretched` | `boolean` | `false` | Если true, таблица по умолчанию занимает всю ширину редактора. |
| `restrictedTools` | `string[]` | `[]` | Дополнительные имена инструментов, которые нельзя вставлять в ячейки таблицы. |

### Формат данных

TypeScript

```
interface TableData {
  withHeadings: boolean;       // First row is a heading row
  withHeadingColumn: boolean;  // First column is a heading column
  stretched?: boolean;
  content: CellContent[][];    // 2D array of cell content
  colWidths?: number[];        // Column widths in pixels
  initialColWidth?: number;    // Per-column width in px captured at creation; new columns get initialColWidth / 2
  textSize?: 'compact' | 'comfortable'; // Cell text density; omitted = 'compact' (small text)
}

// Each cell:
interface CellContent {
  blocks: string[];    // IDs of child blocks in this cell
  color?: string;      // Cell background colour
  textColor?: string;  // Cell text colour
  placement?: CellPlacement; // 9-way vertical+horizontal alignment (e.g. 'top-left', 'middle-center')
  colspan?: number;    // Columns this cell spans (origin cells only)
  rowspan?: number;    // Rows this cell spans (origin cells only)
  mergedInto?: [number, number]; // Set when covered by a merge; origin cell at [row, col]
}
```

JSON

```
{
  "id": "jkl012",
  "type": "table",
  "data": {
    "withHeadings": true,
    "withHeadingColumn": false,
    "content": [
      [{ "blocks": ["block1"] }, { "blocks": ["block2"] }],
      [{ "blocks": ["block3"] }, { "blocks": ["block4"] }]
    ]
  }
}
```

### Пример использования

TypeScript

```
import { Blok } from '@bloklabs/core';
import { Table } from '@bloklabs/core/tools';

const editor = new Blok({
  holder: 'editor',
  tools: {
    table: {
      class: Table,
      rows: 3,
      cols: 3,
      withHeadings: true,
    },
  },
});
```
