Чтобы защитить содержимое от редактирования, вы можете заблокировать одну или сразу несколько ячеек. В правом нижнем углу заблокированной ячейки появится изображение желтого замка.

Чтобы заблокировать ячейку, передайте методу lockCell три параметра:
// блокирует ячейку на пересечении 3-й строки и 2-й колонки
$$("ssheet").lockCell(3, 2, true);
Заблокировать/разблокировать несколько ячеек можно тем же методом, но с другими параметрами:
// блокирует 7 ячеек во 2-й строке
$$("ssheet").lockCell({ row:2, column:1 }, { row:2, column:7 }, true);
// блокирует 7 ячеек во 2-й колонке
$$("ssheet").lockCell({ row:1, column:2 }, { row:7, column:2 }, true);
// блокирует 10 ячеек в 1-й и 2-й строке
$$("ssheet").lockCell({ row:1, column:1 }, { row:2, column:5 }, true);
Если ячейка (ячейки) не заданы, метод заблокирует ячейку, выделенную на момент вызова метода.
Вы можете заменить установленное по умолчанию изображение на подсвечивание фона, применив CSS стили:
<style>
.webix_lock:after{
content:" ";
}
.webix_lock {
background-color:#99f29d;
}
</style>
Related sample: Styling locked cells
Вы можете проверить заблокирована ли ячейка с помощью метода isCellLocked.
Метод принимает два параметра:
и возвращает true, если ячейка заблокирована и false если разблокирована.
var isLocked = $$("ssheet").isCellLocked(3, 2);
Вы можете добавить редактор в ячейку таблицы. Опции редактора берутся из диапазона ячеек или из массива, который вы передадите методу. Вы также можете явно указать, добавлять ли пустую опцию.

Для добавления редактора используйте метод setCellEditor. Метод принимает три параметра:
editor:"ss_richselect") диапазон ссылок на ячейки или массив с опциями редактора $$("ss1").setCellEditor(8, 1, {
editor:"ss_richselect",
options:["One", "Two", "Three"]
}, "Sheet1");
// или
$$("ss1").setCellEditor(8, 2, {
editor:"ss_richselect",
options:"B3:B7",
empty:true
}, "Sheet1");
Вы можете получить набор опций редактора с помощью метода getCellEditor.
Метод принимает в качестве параметров ID строки и колонки.
$$("ss1").getCellEditor(8, 1, "Sheet1");
Метод возвращает объект с двумя свойствами:
{ editor:"ss_richselect", options:["One","Two","Three"] }
// или
{editor:"ss_richselect", options:"B3:B7"}
Вы можете добавить чекбоксы и радио кнопки в ячейки, установить и проверить их текущее состояние с помощью методов SpreadSheet API.

Чтобы добавить чекбоксы в ячейки, используйте метод addCheckbox. Чтобы добавить радио кнопки в ячейки, используйте метод addRadio. Оба метода принимают в качестве параметра объект с начальной и конечной ячейками диапазона, в который необходимо добавить чекбоксы или радио кнопки.
{row:id, column:id}{row:id, column:id}$$("ssheet").addRadio({
start:{row:1, column:1},
end:{row:3, column:1}
});
$$("ssheet").addCheckbox({
start:{row:1, column:3},
end:{row:3, column:3}
});
Чтобы установить отметку в чекбокс или радио кнопку, используйте соответствующие методы: markCheckbox и markRadio.
Оба метода принимают следующие параметры:
$$("ssheet").markRadio(2,1);
$$("ssheet").markCheckbox(1,3);
Если вам нужно получить текущее состояние чекбокса или радио кнопки, вы можете применить метод getCellValue к нужной ячейке:
const isChecked = $$("ssheet").getCellValue(1, 1, false);
// -> 1 - checked, 0 - unchecked
Кроме того, к нужной ячейке можно обратиться из другой ячейки с помощью метода setCellValue. Если чекбокс/радио кнопка отмечена, вы получите 1, если нет - 0:
// получение состояния радио кнопки в ячейке A1 из ячейки B1
$$("ssheet").setCellValue(1,2,"=A1");

Также, вы можете задать более сложное условие, например, использовать текст, который будет отрисован в текущей ячейке, в зависимости от состояния чекбокса или радио кнопки в нужной ячейке:
// получение состояния радио кнопки в ячейке A2 из ячейки A5
$$("ssheet").setCellValue(5,1,"=IF(A2,\"A2 marked\", \"A2 is not marked\")");

Вы можете задать фильтр для ячеек с помощью метода setCellFilter.

Передайте методу следующие параметры:
// массив с опциями
$$("ss1").setCellFilter(1,2, ["", "Europe", "Asia", "America"]);
// диапазон ссылок на ячейки
$$("ss1").setCellFilter(2,2, "B3:B7");
Чтобы получить фильтр ячейки, используйте метод getCellFilter. Он принимает следующие параметры:
и возвращает объект с набором опций и id строки и колонки:
Например:
$$("ssheet").getCellFilter(2, 1, "Sheet1");
// -> { options: Array(4), row: 2, column: 1 }
SpreadSheet позволяет сортировать ячейки. Диапазон для сортировки определяется текущим выделением ячеек или параметром, переданным методу sortRange. Всего метод принимает два параметра:
// возрастающая (по умолчанию) сортировка заданного диапазона
$$("ssheet").sortRange("B2:B4");
// убывающая сортировка заданного диапазона
$$("ssheet").sortRange("B2:B4", "desc");
// убывающая сортировка выделенного диапазона
$$("ssheet").sortRange(null,"desc");
Для настройки многоуровневой сортировки передайте объект в качестве параметра config:
// сортирует диапазон A1:C10 по столбцу B (по возрастанию), затем по столбцу C (по убыванию)
$$("ssheet").sortRange("A1:C10", {
hasHeaders: true,
levels: [
{ column: "B", direction: "asc" },
{ column: "C", direction: "desc" }
]
});
Объект для настройки сортировки по нескольким столбцам в параметре config имеет следующую структуру:
{
hasHeaders: boolean;
levels: [
{ column: string | number, direction: string },
...
]
}
Значения по умолчанию для объекта config:
{
hasHeaders: false,
levels: [
{
column: range.start.column, // id первого столбца сортируемого диапазона
direction: "asc"
}
]
}
где:
hasHeaders - (boolean) по умолчанию false. Соответствует чекбоксу в диалоге пользовательской сортировки:
Если true, первая строка выделенного диапазона ячеек будет считаться заголовком, и вместо Столбец A, B, C в выпадающем списке Сортировать по будут отображаться названия этих заголовков:

levels - (array) массив объектов столбцов, по которым выполняется сортировка. Каждый объект столбца включает:
column - (string|number) обязательный, идентификатор столбца в виде строки (например "A", "AA" или "X" и т.д.) или числа (1, 2 и т.д.)direction - (string) необязательный, направление сортировки: "asc" или "desc" (по умолчанию "asc")Порядок уровней имеет значение: именно в таком порядке конфигурация сортировки столбцов будет применяться к данным. Уровни 2 и далее являются «разрешителями равенства» и применяются только в случае, если предыдущее сравнение завершилось вничью (оба значения равны).
Вы можете добавить правило валидации для содержимого ячеек. Правило валидации может быть добавлено в ячейку через интерфейс SpreadSheet:


Это окно содержит набор правил валидации и их атрибутов. После того, как пользователь добавляет правило валидации в ячейку, клик по ней вызывает textarea с деталями правила:

Каждое правило валидации включает в себя ряд параметров:
Правила валидации могут быть следующих типов:
В зависимости от типа правила, оно может иметь следующие атрибуты:
Вы можете задать правила валидации для ячейки прямо в дата сете.
Для этого используйте validation модуль дата объекта. Вы можете задать правила валидации в одном массиве:
data.validation = [
[
"2",
"1",
{
"type": "number",
"integer": 1,
"empty": 1,
"condition": "greater",
"value": "0",
"inputMessage": "Rules:\n\n- integer greater than 0\n- include empty",
"errorHandle": "info",
"errorTitle": "Incorrect data!",
"errorMessage": "Should be integer greater than 0!"
}
],
[
"2",
"2",
{
"type": "date",
"empty": 0,
"condition": "greater",
"value": "45292",
"inputMessage": "Rules:\n\n- date after 01/01/2024\n- exclude empty",
"errorHandle": "stop",
"errorTitle": "Incorrect data!",
"errorMessage": "Should be date after 01/01/2024!"
}
]
];
Коллекция validation также позволяет управлять правилами валидации:
Чтобы добавить правило валидации для ячейки, используйте метод validation.add(row, column, rule, page). Он принимает следующие параметры:
// добавление правила валидации для ячейки B3 страницы 2
$$("ssheet").validation.add(
3,
2,
{
"type": "number",
"integer": 1,
"empty": 1,
"condition": "greater",
"value": "0",
"inputMessage": "Rules:\n\n- integer greater than 0\n- include empty",
"errorHandle": "info",
"errorTitle": "Incorrect data!",
"errorMessage": "Should be integer greater than 0!"
},
2
);
Чтобы удалить примененное правило валидации из ячейки, используйте метод validation.remove(row, column, page). Он принимает следующие параметры:
// удаление правила валидации из ячейки B3 на странице 2
$$("ssheet").validation.remove(3, 2, "Sheet1");
Метод validation.get(row, column, page) позволяет получить правило валидации указанной ячейки. Он принимает следующие параметры:
// получение правила валидации из ячейки B3 на странице 2
$$("ssheet").validation.get(3, 2, "Sheet1");
Чтобы добавить/удалить подсветку для ячейки с правилами валидации, используйте метод validation.highlight(state, page). Он принимает следующие параметры:
// удаление подсветки ячеек с правилами валидации со страницы 2
$$("ssheet").validation.highlight(false, "Sheet1");
В ячейку также можно поместить небольшую диаграмму (спарклайн), что позволит быстро отслеживать динамически изменяющиеся данные.

Чтобы поместить спарклайн внутрь ячейки, необходимо использовать метод addSparkline со следующими параметрами:
$$("ssheet").addSparkline(rowId, columnId, config, page);
Давайте поместим в ячейку E5 синий спарклайн с типом "line":
$$("ssheet").addSparkline(5, 5, {type:"line", range:"B4:E4", color:"#6666FF"});
Related sample: Adding sparklines
Вы можете добавить в ячейку изображение.

Используйте метод addImage, который принимает три параметра:
$$("ssheet").addImage(2,3, "http://docs.webix.com/media/desktop/image.png", "Sheet1");
Также вы можете добавить комментарии к ячейкам SpreadSheet.

Используйте метод add() объекта comments. Метод принимает три параметра:
// добавляет комментарий в ячейку B3
$$("ssheet").comments.add(3,2,"text");
API объекта comments также позволяет получать комментарии определенной ячейки или удалять ненужные комментарии:
// получает комментарий ячейки B3
$$("ssheet").comments.get(3,2);
// удаляет комментарий из ячейки B3
$$("ssheet").comments.remove(3,2);
Вы можете указать, какие именно данные будут отображаться в ячейках SpreadSheet, используя плейсхолдеры.
Плейсхолдер - это объект со свойствами данных, которые могут быть заданы как значения SpreadSheet. Чтобы установить плейсхолдер, используйте метод setPlaceholder:
$$("ssheet").setPlaceholder({value:"France", expense:1366, income:842});
Если нужно обновить одно значение, передайте имя плейсхолдера строкой, а значение - вторым параметром:
$$("ssheet").setPlaceholder("expense", 1366);
Обратите внимание, что в именах плейсхолдеров нельзя использовать следующие специальные символы:
Для разделения слов в именах плейсхолдеров рекомендуется использовать нижнее подчёркивание, например: "my_name".
Чтобы указать свойство плейсхолдера в ячейке вместо значения, используйте следующую конструкцию:
={{property}}.
Например, для ячейки со значением "expense" плейсхолдер будет указан следующим образом:
"={{expense}}".

Если вы зададите новый плейсхолдер для SpreadSheet, значения всех ячеек, в которых были указаны свойства этого плейсхолдера, обновятся.
$$("ssheet").setPlaceholder({value:"Poland", expense:684, income:781});

При экспорте данных Spreadsheet в Excel плейсхолдеры заменяются своими значениями.
Например, если у вас есть плейсхолдер =A1+{{value}}, где value равно 10, формула в ячейке будет заменена выражением =A1+10.
Однако можно поместить все плейсхолдеры на отдельный лист и ссылаться на них как =A1+Placeholders!B1 (где "Placeholders" - название листа с плейсхолдерами).
Такой подход позволяет редактировать их в файле Excel.
Ниже приведён пример файла Excel с экспортированными данными Spreadsheet и плейсхолдерами:


Related sample: Extra Placeholder Sheet on Excel Export
SpreadSheet поддерживает все типы границ, доступные в Excel:

Чтобы выбрать тип границы, откройте попап Borders на панели инструментов и воспользуйтесь элементом управления Border line type.

Свойство конфигурации borderCollapse управляет тем, как Spreadsheet отображает границы ячеек.
Доступны два режима применения границ к ячейкам:
borderCollapse: false - (по умолчанию) каждая ячейка имеет собственные границы
borderCollapse: true - границы являются общими для соседних ячеек в стиле Excel
В этом режиме граница между двумя соседними ячейками принадлежит правой ячейке (для вертикальных границ) или нижней ячейке (для горизонтальных границ). Исключение: верхнюю и левую границы можно задать для начальной (верхней левой) ячейки диапазона с границами.
При использовании borderCollapse: true убедитесь, что загружаемые данные не содержат конфликтующих границ (например, ячейка с нижней границей и ячейка непосредственно под ней с верхней границей). Для автоматического разрешения таких конфликтов включите параметр prepareData: true.
Spreadsheet позволяет объединять соседние ячейки в одну с помощью панели инструментов, меню или API. Объединённая ячейка отображает значение и стиль верхней левой ячейки диапазона.
На изображении ниже ячейки первой строки объединены:

Для объединения ячеек через API используйте метод combineCells. Метод принимает необязательный объект диапазона и необязательное название листа:
$$("ssheet").combineCells({cell:{row:4, column:5}, x:2, y:2}, "Sheet1");
Параметры метода:
Если диапазон не указан, Spreadsheet объединяет текущие выбранные ячейки.
Для разделения объединённых ячеек используйте метод splitCell:
$$("ssheet").splitCell(4, 5, "Sheet1");
Параметры метода:
Чтобы проверить, объединена ли ячейка, используйте метод getSpan:
const span = $$("ssheet").getSpan(1, 1);
// возвращает [1, 1, 5, 1]
Параметры метода:
Метод возвращает массив в том же формате, что и поле spans в данных:
Если ячейка не объединена, метод возвращает undefined.
Например:

При объединении ячеек Spreadsheet применяет стиль, показанный ниже:

Например:

Результат объединения ячеек с разными типами границ:

Установите sheetStubs:true, если нужно импортировать файл Excel, содержащий объединённые ячейки с границами. Это импортирует стили пустых ячеек под объединением, чтобы все ячейки объединённого диапазона имели границы. В противном случае границы будут только у верхней левой ячейки объединённого диапазона.