PHP: полный мануал с примерами, функциями и ООП
Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Дерево руководства
Глава 441 · От первой операции до полного справочника
XLSWriter: отчёты Excel, листы, формулы, изображения и форматирование
Создать XLSX из массива PHP, добавить листы и формулы, оформить строки и получить готовый файл отчёта.
XLSWriter: потоковая выгрузка XLSX
XLSWriter — нативное расширение для быстрого экспорта XLSX. Приложение создаёт книгу в разрешённом каталоге, выбирает лист, записывает заголовки и двумерные данные, добавляет форматы/формулы/изображения и получает путь готового файла.
Официальная страница: XLSWriter.
Класс Vtiful\Kernel\Excel
Книга управляет файлом, текущим листом, диапазонами и выводом. Большинство методов образует цепочку, но финальный output() нужен, чтобы закрыть книгу и получить путь артефакта.
| Операция | Официальное назначение |
|---|---|
Vtiful\Kernel\Excel::addSheet | Vtiful\Kernel\Excel addSheet |
Vtiful\Kernel\Excel::autoFilter | Vtiful\Kernel\Excel autoFilter |
Vtiful\Kernel\Excel::constMemory | Vtiful\Kernel\Excel constMemory |
Vtiful\Kernel\Excel::__construct | Vtiful\Kernel\Excel constructor |
Vtiful\Kernel\Excel::data | Vtiful\Kernel\Excel data |
Vtiful\Kernel\Excel::fileName | Vtiful\Kernel\Excel fileName |
Vtiful\Kernel\Excel::getHandle | Vtiful\Kernel\Excel getHandle |
Vtiful\Kernel\Excel::header | Vtiful\Kernel\Excel header |
Vtiful\Kernel\Excel::insertFormula | Vtiful\Kernel\Excel insertFormula |
Vtiful\Kernel\Excel::insertImage | Vtiful\Kernel\Excel insertImage |
Vtiful\Kernel\Excel::insertText | Vtiful\Kernel\Excel insertText |
Vtiful\Kernel\Excel::mergeCells | Vtiful\Kernel\Excel mergeCells |
Vtiful\Kernel\Excel::output | Vtiful\Kernel\Excel output |
Vtiful\Kernel\Excel::setColumn | Vtiful\Kernel\Excel setColumn |
Vtiful\Kernel\Excel::setRow | Vtiful\Kernel\Excel setRow |
Официальная страница: The Vtiful\Kernel\Excel class.
Класс Vtiful\Kernel\Format
Format создаётся от дескриптора книги. Методы bold(), italic(), align() и underline() вызываются у объекта Format, после чего toResource() даёт ресурс, который передают в методы книги.
| Константа | Как читать в коде |
|---|---|
Vtiful\Kernel\Format::FORMAT_ALIGN_LEFT | Официальное числовое значение: 1. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER | Официальное числовое значение: 2. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_RIGHT | Официальное числовое значение: 3. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_FILL | Официальное числовое значение: 4. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_JUSTIFY | Официальное числовое значение: 5. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER_ACROSS | Официальное числовое значение: 6. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_DISTRIBUTED | Официальное числовое значение: 7. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_TOP | Официальное числовое значение: 8. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_BOTTOM | Официальное числовое значение: 9. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_CENTER | Официальное числовое значение: 10. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_JUSTIFY | Официальное числовое значение: 11. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_DISTRIBUTED | Официальное числовое значение: 12. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::UNDERLINE_SINGLE | Официальное числовое значение: 1. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::UNDERLINE_DOUBLE | Официальное числовое значение: 2. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::UNDERLINE_SINGLE_ACCOUNTING | Официальное числовое значение: 3. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Vtiful\Kernel\Format::UNDERLINE_DOUBLE_ACCOUNTING | Официальное числовое значение: 4. Передавайте именованную константу, чтобы назначение оставалось видимым в коде. |
Сохранены все официальные инициализаторы констант Format: 16.
| Операция | Официальное назначение |
|---|---|
Vtiful\Kernel\Format::align | Vtiful\Kernel\Format align |
Vtiful\Kernel\Format::bold | Vtiful\Kernel\Format bold |
Vtiful\Kernel\Format::italic | Vtiful\Kernel\Format italic |
Vtiful\Kernel\Format::underline | Vtiful\Kernel\Format underline |
Официальная страница: The Vtiful\Kernel\Format class.
Установка XLSWriter
Официальный раздел установки направляет к PECL-пакету xlswriter. В исходнике официальной страницы configure.xml присутствует ошибочная строка про XML-RPC; она не относится к XLSWriter. Практическая проверка — наличие расширения, классов Vtiful\Kernel\Excel/Format и создание минимального XLSX.
Официальная страница: Installation.
Требование XLSWriter
Зафиксированный официальный источник указывает PHP 7.0 или новее. Для текущего проекта дополнительно проверяют поддержку выбранной версии PHP самим релизом расширения и совместимость libxlsxwriter.
Официальная страница: Requirements.
Дескриптор книги и ресурс формата
Официальная страница отмечает внутренний ресурс, возвращаемый книгой и используемый Vtiful\Kernel\Format. На практике дескриптор получают через getHandle(), затем создают объект Format и превращают его в ресурс формата для методов записи.
Официальная страница: Resource Types.
Подготовка выгрузки XLSX
| До записи | Зачем |
|---|---|
| Создать отдельный каталог экспорта | Не смешивать пользовательские имена с путём файловой системы |
| Определить столбцы и типы | Порядок заголовков должен совпадать с порядком данных |
| Нормализовать даты и числа | Excel не должен угадывать тип по локали |
| Экранировать формульные префиксы во внешнем тексте | Значения, начинающиеся с =, +, - или @, могут стать формулой |
| Выбрать constMemory для большого набора | Не держать весь отчёт и всю книгу в памяти |
Официальная страница: Installing/Configuring.
Книга, лист, ячейка и почему XLSX начинается с PK
Книга содержит листы; лист содержит строки и ячейки; формат задаёт отображение, а формула — вычисление в табличном редакторе. Сам XLSX является ZIP-контейнером из XML-файлов, поэтому размер исходного массива и размер готового архива не равны расходу памяти PHP.
- Получить строки из базы или API
- Создать книгу и выбрать лист
- Записать заголовок и данные
- Добавить формат, фильтр и формулы
- Закрыть книгу, проверить файл и отдать его пользователю
Первый отчёт, который можно открыть в Excel
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог exports');
}
$rows = [
['A-42', 12500, 'Оплачен'],
['A-43', 7800, 'Ожидает'],
['A-44', 3100, 'Отменён'],
];
$excel = new \Vtiful\Kernel\Excel(['path' => $directory]);
$book = $excel->fileName('orders.xlsx', 'Заказы');
$book->header(['Заказ', 'Сумма', 'Статус'])
->data($rows)
->autoFilter('A1:C4')
->setColumn('A:A', 14.0)
->setColumn('B:B', 16.0)
->insertFormula(4, 1, '=SUM(B2:B4)');
$path = $book->output();
if (!is_string($path) || !is_file($path)) {
throw new RuntimeException('XLSX не создан');
}
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') {
throw new RuntimeException('Файл не имеет ZIP-сигнатуру XLSX');
}
echo basename($path), PHP_EOL;
echo 'rows=3 formula=SUM(B2:B4) format=XLSX', PHP_EOL;
XLSX — ZIP-контейнер, поэтому проверяется сигнатура PK и существование файла. Формула записывается в книгу, а окончательное вычисление может выполнить табличный редактор. Runtime xlswriter на текущем стенде пока не заявлен.
Что должно получиться в совместимом окружении: orders.xlsx
rows=3 formula=SUM(B2:B4) format=XLSX
Большая выгрузка: считать из базы порциями
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
function orderRows(PDO $pdo): Generator
{
$query = $pdo->query('SELECT number, total, status FROM orders ORDER BY id');
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
yield [(string) $row['number'], (float) $row['total'], (string) $row['status']];
}
}
$pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$pdo->exec('CREATE TABLE orders (id INTEGER PRIMARY KEY, number TEXT, total REAL, status TEXT)');
$insert = $pdo->prepare('INSERT INTO orders (number, total, status) VALUES (?, ?, ?)');
foreach ([
['A-42', 12500.0, 'Оплачен'],
['A-43', 7800.0, 'Ожидает'],
['A-44', 3100.0, 'Отменён'],
] as $fixture) {
$insert->execute($fixture);
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог exports');
}
$excel = new \Vtiful\Kernel\Excel(['path' => $directory]);
$sheet = $excel->constMemory('orders-large.xlsx', 'Заказы');
$sheet->header(['Заказ', 'Сумма', 'Статус']);
$batch = [];
foreach (orderRows($pdo) as $row) {
$batch[] = $row;
if (count($batch) === 500) {
$sheet->data($batch);
$batch = [];
}
}
if ($batch !== []) {
$sheet->data($batch);
}
$path = $sheet->output();
if (!is_string($path) || !is_file($path)) {
throw new RuntimeException('XLSX не создан');
}
if (file_get_contents($path, false, null, 0, 2) !== 'PK') {
throw new RuntimeException('Файл не имеет ZIP-сигнатуру XLSX');
}
echo basename((string) $path), PHP_EOL;
echo 'source=PDO batches<=500 mode=constant-memory', PHP_EOL;
Генератор читает результат базы построчно, а пакет ограничен 500 строками. Код не создаёт полный массив всех заказов и не кодирует XLSX в base64/JSON. Фактический предел памяти и возможность повторных data() должны быть подтверждены на выбранной версии xlswriter до публикации runtime-метрики.
Что должно получиться в совместимом окружении: orders-large.xlsx
source=PDO batches<=500 mode=constant-memory
Увеличение memory_limit не исправляет архитектуру, где данные одновременно лежат в PDO-результате, огромном PHP-массиве, объектной модели книги, строке XLSX и base64-копии для JSON. Файл сохраняют на диск или поток и отдают отдельным ответом.
| Проблема из практики | Как она закрыта в руководстве |
|---|---|
| Большая книга исчерпывает память, когда весь набор и модель документа одновременно держатся в PHP-массивах. | Сценарий constMemory читает PDO построчно, ограничивает пакет и сохраняет файл вместо второй копии в памяти. |
| XLSX кодируют в base64 внутри JSON, увеличивая расход памяти и объём ответа. | Глава завершает файл на диске, проверяет ZIP-сигнатуру и рекомендует отдельную файловую выдачу или поток. |
Как превратить отдельные вызовы в рабочий сервис
Спрячьте нативное расширение за одним прикладным классом: на вход он получает проверенную модель, внутри вызывает операции этой главы, а наружу возвращает путь или байты готового документа. Так HTTP-контроллер не знает о ресурсах, временных файлах и константах расширения.
Следующий шаг: добавить временный каталог на один запрос, журнал ошибок без секретных данных, лимит размера/времени и независимую проверку результата другим инструментом.
Функции и методы этой темы
Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.
Vtiful\Kernel\Excel::addSheetДобавить в книгу ещё один лист с понятным именем.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::addSheet(string $sheetName): mixedДобавить в книгу ещё один лист с понятным именем.
Официальная сигнатура. Vtiful\Kernel\Excel::addSheet(string $sheetName): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
string $sheetName | Отображаемое имя листа; учитывайте ограничения длины и запрещённые символы Excel. Точная формулировка PHP ManualWorksheet name |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$result = $excel->addSheet('Итоги');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::addSheet: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$result = $excel->addSheet('Резерв');
$result->header(['SKU', 'Резерв'])->data([['A-42', 4], ['B-17', 0]]);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::addSheet: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте каталог, безопасное имя и существование листа; активный лист определяет адрес следующих операций.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel addSheet
Description Create a new worksheet in the xlsx file.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::autoFilterВключить автофильтр для указанного диапазона таблицы.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::autoFilter(string $scope): mixedВключить автофильтр для указанного диапазона таблицы.
Официальная сигнатура. Vtiful\Kernel\Excel::autoFilter(string $scope): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
string $scope | Диапазон Excel, к которому применяется операция, например A1:C200. Точная формулировка PHP ManualCell start and end coordinate string. |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->autoFilter('A1:C3');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::autoFilter: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->autoFilter('A1:C3');
$excel->setColumn('A:C', 18.0);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::autoFilter: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel autoFilter
Description Add autofilter to a worksheet.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::constMemoryСоздать XLSX в режиме постоянного расхода памяти для большой выгрузки.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::constMemory(string $fileName, string $sheetName = ?): mixedСоздать XLSX в режиме постоянного расхода памяти для большой выгрузки.
Официальная сигнатура. Vtiful\Kernel\Excel::constMemory(string $fileName, string $sheetName = ?): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
string $fileName | Безопасное имя итогового XLSX внутри заранее разрешённого каталога. Точная формулировка PHP ManualXLSX file name |
string $sheetName = значение по умолчанию | Отображаемое имя листа; учитывайте ограничения длины и запрещённые символы Excel. Точная формулировка PHP ManualWorksheet name |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. большую выгрузку из PDO порциями. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$result = $excel->constMemory('orders.xlsx', 'Заказы');
$result->header(['SKU', 'Остаток']);
$result->data([['A-42', 3]]);
$path = $result->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::constMemory: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$result = $excel->constMemory('warehouse.xlsx', 'Остатки');
$result->header(['SKU', 'Остаток']);
foreach ([['A-42', 17], ['B-17', 2], ['C-11', 0]] as $row) { $result->data([$row]); }
$path = $result->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::constMemory: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Ограничивайте пакет строк, не держите вторую полную копию данных и измеряйте память на своей версии расширения.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel constMemory
Description Write a large file with constant memory usage.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::__constructСоздать объект Excel с каталогом, куда разрешено записывать отчёты.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::__construct(array $config): voidСоздать объект Excel с каталогом, куда разрешено записывать отчёты.
Официальная сигнатура. Vtiful\Kernel\Excel::__construct(array $config): void.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
array $config | Конфигурация XLSWriter, прежде всего разрешённый каталог path для итоговых файлов. Точная формулировка PHP ManualXLSX file export configuration |
Возврат. Тип void. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$result = new \Vtiful\Kernel\Excel($config);
echo get_class($result), PHP_EOL;
Vtiful\Kernel\Excel::__construct: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: Vtiful\Kernel\Excel
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$result = new \Vtiful\Kernel\Excel($config);
echo get_class($result), PHP_EOL;
$result->fileName('warehouse.xlsx', 'Остатки')->header(['SKU', 'Остаток'])->data([['A-42', 17]]);
$path = $result->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('Книга не создана'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::__construct: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: Vtiful\Kernel\Excel
warehouse.xlsx
Отказ и граница проверки. успех не имеет возвращаемого значения, поэтому проверяется последующий эффект. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel constructor
Description Vtiful\Kernel\Excel constructor, create a class object.
Return:
Vtiful\Kernel\Excel::dataЗаписать двумерный массив строк в текущий лист.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::data(array $data): mixedЗаписать двумерный массив строк в текущий лист.
Официальная сигнатура. Vtiful\Kernel\Excel::data(array $data): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
array $data | Двумерный массив строк таблицы: внешний массив — строки, внутренний — значения столбцов. Точная формулировка PHP Manualworksheet data |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$result = $excel->data([['A-42', 3], ['B-17', 5]]);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::data: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$result = $excel->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$excel->autoFilter('A1:C2');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::data: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Ограничивайте пакет строк, не держите вторую полную копию данных и измеряйте память на своей версии расширения.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel data
Description Write a data in the worksheet.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::fileNameСоздать обычный XLSX-файл и выбрать первый лист.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::fileName(string $fileName, string $sheetName = ?): mixedСоздать обычный XLSX-файл и выбрать первый лист.
Официальная сигнатура. Vtiful\Kernel\Excel::fileName(string $fileName, string $sheetName = ?): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
string $fileName | Безопасное имя итогового XLSX внутри заранее разрешённого каталога. Точная формулировка PHP ManualXLSX file name |
string $sheetName = значение по умолчанию | Отображаемое имя листа; учитывайте ограничения длины и запрещённые символы Excel. Точная формулировка PHP ManualWorksheet name |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$result = $excel->fileName('orders.xlsx', 'Заказы');
$path = $result->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::fileName: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$result = $excel->fileName('warehouse.xlsx', 'Остатки');
$result->header(['SKU', 'Остаток'])->data([['A-42', 17], ['B-17', 2]]);
$path = $result->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::fileName: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте каталог, безопасное имя и существование листа; активный лист определяет адрес следующих операций.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel fileName
Description Create a brand new xlsx file and create a worksheet.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::getHandleПолучить внутренний дескриптор книги для создания форматов.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::getHandle(): mixedПолучить внутренний дескриптор книги для создания форматов.
Официальная сигнатура. Vtiful\Kernel\Excel::getHandle(): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
| Параметров нет | Операция использует конфигурацию расширения или состояние созданного объекта. |
Возврат. Тип mixed. Официальный текст: Return Values Resource
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$result = $excel->getHandle();
if (!is_resource($result)) { throw new RuntimeException('Дескриптор книги не получен'); }
echo 'handle=resource', PHP_EOL;
Vtiful\Kernel\Excel::getHandle: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: handle=resource
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$result = $excel->getHandle();
if (!is_resource($result)) { throw new RuntimeException('Дескриптор книги не получен'); }
echo 'handle=resource', PHP_EOL;
$format = new \Vtiful\Kernel\Format($result);
$bold = $format->bold()->toResource();
$excel->header(['SKU', 'Остаток'])->setColumn('A:B', 20.0, $bold);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::getHandle: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: handle=resource
warehouse.xlsx
Отказ и граница проверки. сначала проверяется заявленный тип результата. Формат должен принадлежать дескриптору этой книги; используйте именованные константы и передавайте полученный resource только совместимым методам.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel getHandle
Description Get the xlsx text resource handle.
Return: Return Values Resource
Vtiful\Kernel\Excel::headerЗаписать строку заголовков перед данными отчёта.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::header(array $headerData): mixedЗаписать строку заголовков перед данными отчёта.
Официальная сигнатура. Vtiful\Kernel\Excel::header(array $headerData): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
array $headerData | Массив заголовков в том же порядке, что и столбцы данных. Точная формулировка PHP Manualworksheet header data |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$result = $excel->header(['SKU', 'Количество']);
$result->data([['A-42', 3], ['B-17', 5]]);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::header: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$excel = new \Vtiful\Kernel\Excel(['path' => $directory]);
$excel->fileName('warehouse.xlsx', 'Остатки');
$records = [
['sku' => 'A-42', 'available' => 13, 'status' => 'В наличии'],
['sku' => 'B-17', 'available' => 2, 'status' => 'Заканчивается'],
];
$columns = ['sku' => 'Артикул', 'available' => 'Доступно', 'status' => 'Статус'];
$result = $excel->header(array_values($columns));
$rows = array_map(static fn(array $record): array => array_map(static fn(string $key): mixed => $record[$key], array_keys($columns)), $records);
$result->data($rows)->autoFilter('A1:C3');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::header: Заголовок строится из явной схемы ассоциативных записей, а строки приводятся к тому же порядку ключей: это защищает выгрузку от перестановки столбцов. Выполнение требует ext/xlswriter; локально выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — заголовок из схемы, 3 столбца и 2 строки данных; сигнатура PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel header
Description Write a header in the worksheet.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::insertFormulaЗаписать формулу Excel в конкретную ячейку.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::insertFormula(int $row, int $column, string $formula): mixedЗаписать формулу Excel в конкретную ячейку.
Официальная сигнатура. Vtiful\Kernel\Excel::insertFormula(int $row, int $column, string $formula): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
int $row | Номер строки XLSX по правилам расширения; проверьте базу отсчёта на минимальном файле. Точная формулировка PHP Manualcell row |
int $column | Номер столбца XLSX по правилам расширения; это индекс, а не буква A/B/C. Точная формулировка PHP Manualcell column |
string $formula | Формула Excel без вычисления в PHP; результат пересчитает табличный редактор. Точная формулировка PHP Manualformula string |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->insertFormula(2, 2, '=SUM(B2:B200)');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::insertFormula: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->insertFormula(2, 3, '=B2-C2');
$excel->insertText(3, 0, 'Свободно')->insertFormula(3, 1, '=B2-C2');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::insertFormula: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel insertFormula
Description Insert calculation formula.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::insertImageВставить локальное изображение в выбранную ячейку.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::insertImage(int $row, int $column, string $localImagePath): mixedВставить локальное изображение в выбранную ячейку.
Официальная сигнатура. Vtiful\Kernel\Excel::insertImage(int $row, int $column, string $localImagePath): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
int $row | Номер строки XLSX по правилам расширения; проверьте базу отсчёта на минимальном файле. Точная формулировка PHP Manualcell row |
int $column | Номер столбца XLSX по правилам расширения; это индекс, а не буква A/B/C. Точная формулировка PHP Manualcell column |
string $localImagePath | Путь к локальному PNG/JPEG, который действительно доступен PHP-процессу. Точная формулировка PHP Manuallocal image path |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$imagePath = __DIR__ . '/fixtures/logo.png';
if (!is_file($imagePath)) { throw new RuntimeException('Нужен PNG fixture'); }
$result = $excel->insertImage(1, 0, $imagePath);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::insertImage: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$imagePath = __DIR__ . '/fixtures/warehouse.png';
if (!is_file($imagePath)) { throw new RuntimeException('Нужен PNG fixture'); }
$result = $excel->insertImage(1, 0, $imagePath);
$excel->setRow('2:8', 28.0);
$excel->insertText(8, 0, 'Логотип склада');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::insertImage: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте fixture изображения, координаты и размер; затем откройте готовую книгу независимым табличным редактором.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel insertImage
Description Insert a local image into the cell.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::insertTextЗаписать число или текст в конкретную ячейку с необязательным форматом.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::insertText(int $row, int $column, int|float|string $data, string $format = ?): mixedЗаписать число или текст в конкретную ячейку с необязательным форматом.
Официальная сигнатура. Vtiful\Kernel\Excel::insertText(int $row, int $column, int|float|string $data, string $format = ?): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
int $row | Номер строки XLSX по правилам расширения; проверьте базу отсчёта на минимальном файле. Точная формулировка PHP Manualcell row |
int $column | Номер столбца XLSX по правилам расширения; это индекс, а не буква A/B/C. Точная формулировка PHP Manualcell column |
int|float|string $data | Двумерный массив строк таблицы: внешний массив — строки, внутренний — значения столбцов. Точная формулировка PHP Manualdata to be written |
string $format = значение по умолчанию | Ресурс формата XLSWriter или строковый формат именно согласно сигнатуре выбранной версии. Точная формулировка PHP ManualString format |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$result = $excel->insertText(1, 0, 'A-42');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::insertText: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$result = $excel->insertText(1, 1, 17);
$excel->insertText(2, 0, 'B-17')->insertText(2, 1, 2);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::insertText: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel insertText
Description Write text in a cell.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::mergeCellsОбъединить диапазон ячеек и записать в него значение.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::mergeCells(string $scope, string $data): mixedОбъединить диапазон ячеек и записать в него значение.
Официальная сигнатура. Vtiful\Kernel\Excel::mergeCells(string $scope, string $data): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
string $scope | Диапазон Excel, к которому применяется операция, например A1:C200. Точная формулировка PHP Manualcell start and end coordinate strings |
string $data | Двумерный массив строк таблицы: внешний массив — строки, внутренний — значения столбцов. Точная формулировка PHP Manualstring data |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->mergeCells('A1:C1', 'Отчёт по заказам');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::mergeCells: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$excel = new \Vtiful\Kernel\Excel(['path' => $directory]);
$excel->fileName('warehouse.xlsx', 'Остатки');
$result = $excel->mergeCells('A1:D1', 'Складские остатки на 16.10.2026');
$result->insertText(1, 0, 'SKU')
->insertText(1, 1, 'Наименование')
->insertText(1, 2, 'Остаток')
->insertText(1, 3, 'Резерв')
->insertText(2, 0, 'A-42')
->insertText(2, 1, 'Кабель')
->insertText(2, 2, 17)
->insertText(2, 3, 4);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::mergeCells: Объединение создаёт общий заголовок отчёта, а табличные данные записываются ниже отдельными ячейками. Выполнение требует ext/xlswriter; локально выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — объединённый заголовок A1:D1 и отдельная строка данных; сигнатура PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel mergeCells
Description Merge Cells.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::outputЗакрыть книгу и получить путь к готовому XLSX-файлу.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::output(): mixedЗакрыть книгу и получить путь к готовому XLSX-файлу.
Официальная сигнатура. Vtiful\Kernel\Excel::output(): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
| Параметров нет | Операция использует конфигурацию расширения или состояние созданного объекта. |
Возврат. Тип mixed. Официальный текст: Return Values XLSX file path;
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->output();
if (!is_string($result) || !is_file($result)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($result, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($result), PHP_EOL;
Vtiful\Kernel\Excel::output: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->output();
if (!is_string($result) || !is_file($result)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($result, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($result), PHP_EOL;
echo 'bytes=', filesize($result), PHP_EOL;
Vtiful\Kernel\Excel::output: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx
bytes=<положительное число>
Отказ и граница проверки. сначала проверяется заявленный тип результата. Создайте каталог, завершите книгу, проверьте существование файла и ZIP-сигнатуру PK.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel output
Description Output xlsx file to disk.
Return: Return Values XLSX file path;
Vtiful\Kernel\Excel::setColumnЗадать ширину столбцов и при необходимости их формат.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::setColumn(string $range, float $width, resource $format = ?): mixedЗадать ширину столбцов и при необходимости их формат.
Официальная сигнатура. Vtiful\Kernel\Excel::setColumn(string $range, float $width, resource $format = ?): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
string $range | Диапазон столбцов Excel в A1-подобной форме, например A:C. Точная формулировка PHP Manualcell start and end coordinate strings |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP Manualcolumn width |
resource $format = значение по умолчанию | Ресурс формата XLSWriter или строковый формат именно согласно сигнатуре выбранной версии. Точная формулировка PHP Manualcell format resource |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->setColumn('A:C', 18.0);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::setColumn: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$excel = new \Vtiful\Kernel\Excel(['path' => $directory]);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['SKU', 'Описание', 'Остаток'])->data([['A-42', 'Кабель силовой огнестойкий', 17], ['B-17', 'Муфта соединительная', 2]]);
$excel->setColumn('A:A', 14.0);
$result = $excel->setColumn('B:B', 42.0);
$result->setColumn('C:C', 12.0)->autoFilter('A1:C3');
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::setColumn: Ширина выбирается по назначению столбца: короткий SKU, длинное описание и компактный числовой остаток. Выполнение требует ext/xlswriter; локально выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — каждому типу данных назначена отдельная ширина; сигнатура PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel setColumn
Description Set the format of the column.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Excel::setRowЗадать высоту строк и при необходимости их формат.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Excel::setRow(string $range, float $height, resource $format = ?): mixedЗадать высоту строк и при необходимости их формат.
Официальная сигнатура. Vtiful\Kernel\Excel::setRow(string $range, float $height, resource $format = ?): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
string $range | Диапазон столбцов Excel в A1-подобной форме, например A:C. Точная формулировка PHP Manualcell start and end coordinate strings |
float $height | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP Manualrow height |
resource $format = значение по умолчанию | Ресурс формата XLSWriter или строковый формат именно согласно сигнатуре выбранной версии. Точная формулировка PHP Manualcell format resource |
Возврат. Тип mixed. Официальный текст: Return Values Vtiful\Kernel\Excel instance
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->setRow('1', 24.0);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::setRow: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['SKU', 'Остаток', 'Резерв'])->data([['A-42', 17, 4], ['B-17', 2, 0]]);
$result = $excel->setRow('1:2', 30.0);
$excel->setColumn('A:C', 18.0);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
$head = file_get_contents($path, false, null, 0, 2);
if ($head !== 'PK') { throw new RuntimeException('XLSX должен быть ZIP-контейнером'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Excel::setRow: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — файл существует и начинается с ZIP-сигнатуры PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте диапазон/индексы, тип входных данных и завершите книгу через output(); отсутствие исключения не доказывает читаемость XLSX.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Excel setRow
Description Set the format of the row.
Return: Return Values Vtiful\Kernel\Excel instance
Vtiful\Kernel\Format::alignСоздать формат с заданным выравниванием.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Format::align(resource $handle, int $style): mixedСоздать формат с заданным выравниванием.
Официальная сигнатура. Vtiful\Kernel\Format::align(resource $handle, int $style): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
resource $handle | Внутренний дескриптор открытой XLSX-книги, полученный через getHandle(). Точная формулировка PHP Manualxlsx file handle |
int $style | Именованный стиль/константа именно той функции, куда он передаётся. Точная формулировка PHP ManualVtiful\Kernel\Format constant |
Возврат. Тип mixed. Официальный текст: Return Values Resource
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['Название', 'Значение'])->data([['Продажи', 12500], ['Возвраты', 800]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER)->toResource();
$excel->setColumn('A:B', 24.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::align: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — таблица с двумя строками и применённым форматом.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$excel = new \Vtiful\Kernel\Excel(['path' => $directory]);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['Операция', 'Сумма'])->data([['Приход', 12500], ['Расход', -3200], ['Итого', 9300]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_RIGHT)->toResource();
$excel->setColumn('B:B', 18.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::align: Правое выравнивание применяется только к денежному столбцу отчёта, чтобы суммы разных знаков читались как единая колонка. Выполнение требует ext/xlswriter; локально выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — числовой столбец выровнен вправо и файл начинается с PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Формат должен принадлежать дескриптору этой книги; используйте именованные константы и передавайте полученный resource только совместимым методам.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Format align
Description set cell align
Return: Return Values Resource
Vtiful\Kernel\Format::boldСоздать полужирный формат для заголовков и итогов.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Format::bold(resource $handle): mixedСоздать полужирный формат для заголовков и итогов.
Официальная сигнатура. Vtiful\Kernel\Format::bold(resource $handle): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
resource $handle | Внутренний дескриптор открытой XLSX-книги, полученный через getHandle(). Точная формулировка PHP Manualxlsx file handle |
Возврат. Тип mixed. Официальный текст: Return Values Resource
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['Название', 'Значение'])->data([['Продажи', 12500], ['Возвраты', 800]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->bold()->toResource();
$excel->setColumn('A:B', 24.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::bold: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — таблица с двумя строками и применённым форматом.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['Название', 'Значение'])->data([['Продажи', 12500], ['Возвраты', 800]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->bold()->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_RIGHT)->toResource();
$excel->setColumn('A:B', 24.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::bold: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — таблица с двумя строками и применённым форматом.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Формат должен принадлежать дескриптору этой книги; используйте именованные константы и передавайте полученный resource только совместимым методам.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Format bold
Description Vtiful\Kernel\Format bold format
Return: Return Values Resource
Vtiful\Kernel\Format::italicСоздать курсивный формат для примечаний.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Format::italic(resource $handle): mixedСоздать курсивный формат для примечаний.
Официальная сигнатура. Vtiful\Kernel\Format::italic(resource $handle): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
resource $handle | Внутренний дескриптор открытой XLSX-книги, полученный через getHandle(). Точная формулировка PHP Manualxlsx file handle |
Возврат. Тип mixed. Официальный текст: Return Values Resource
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['Название', 'Значение'])->data([['Продажи', 12500], ['Возвраты', 800]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->italic()->toResource();
$excel->setColumn('A:B', 24.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::italic: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — таблица с двумя строками и применённым форматом.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['Название', 'Значение'])->data([['Продажи', 12500], ['Возвраты', 800]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->italic()->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_LEFT)->toResource();
$excel->setColumn('A:B', 24.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::italic: второй пример меняет набор столбцов/оформление и проверяет созданный XLSX по существованию и ZIP-сигнатуре. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — таблица с двумя строками и применённым форматом.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Формат должен принадлежать дескриптору этой книги; используйте именованные константы и передавайте полученный resource только совместимым методам.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Format italic
Description Vtiful\Kernel\Format italic format
Return: Return Values Resource
Vtiful\Kernel\Format::underlineСоздать формат с выбранным типом подчёркивания.
PECL xlswriter >= 1.2.1 · xlswriter; libxlsxwriter
Vtiful\Kernel\Format::underline(resource $handle, int $style): mixedСоздать формат с выбранным типом подчёркивания.
Официальная сигнатура. Vtiful\Kernel\Format::underline(resource $handle, int $style): mixed.
Доступность. Точная строка официального versions.xml: PECL xlswriter >= 1.2.1.
| Параметр | Что приходит и зачем |
|---|---|
resource $handle | Внутренний дескриптор открытой XLSX-книги, полученный через getHandle(). Точная формулировка PHP Manualxlsx file handle |
int $style | Именованный стиль/константа именно той функции, куда он передаётся. Точная формулировка PHP ManualVtiful\Kernel\Format constant |
Возврат. Тип mixed. Официальный текст: Return Values Resource
Где увидеть в целой задаче. готовый XLSX-отчёт с проверкой файла. Что знать до примера: переменные, вызов функций и возврат, массивы, объекты и методы, исключения и обработка отказа, файлы и каталоги.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$config = ['path' => $directory];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('orders.xlsx', 'Заказы');
$excel->header(['Название', 'Значение'])->data([['Продажи', 12500], ['Возвраты', 800]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->underline(\Vtiful\Kernel\Format::UNDERLINE_SINGLE)->toResource();
$excel->setColumn('A:B', 24.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::underline: показан корректный объектный вызов и место метода в жизненном цикле книги. Выполнение требует ext/xlswriter; в текущей среде выполнен PHP lint.
Что должно получиться в совместимом окружении: orders.xlsx — таблица с двумя строками и применённым форматом.
<?php
declare(strict_types=1);
if (!extension_loaded('xlswriter')) {
throw new RuntimeException('Нужно расширение xlswriter');
}
$directory = __DIR__ . '/warehouse-exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
throw new RuntimeException('Не создан каталог выгрузки');
}
$excel = new \Vtiful\Kernel\Excel(['path' => $directory]);
$excel->fileName('warehouse.xlsx', 'Остатки');
$excel->header(['Показатель', 'Значение'])->data([['Приход', 12500], ['Расход', 3200], ['Итого', 9300]]);
$format = new \Vtiful\Kernel\Format($excel->getHandle());
$result = $format->underline(\Vtiful\Kernel\Format::UNDERLINE_DOUBLE_ACCOUNTING)->toResource();
$excel->setRow('4', 24.0, $result);
$path = $excel->output();
if (!is_string($path) || !is_file($path)) { throw new RuntimeException('XLSX не создан'); }
if (file_get_contents($path, false, null, 0, 2) !== 'PK') { throw new RuntimeException('Нет ZIP-сигнатуры XLSX'); }
echo basename($path), PHP_EOL;
Vtiful\Kernel\Format::underline: Двойное бухгалтерское подчёркивание выделяет итоговую строку, а не весь столбец с одинаковым форматированием. Выполнение требует ext/xlswriter; локально выполнен PHP lint.
Что должно получиться в совместимом окружении: warehouse.xlsx — итоговая строка имеет двойное бухгалтерское подчёркивание; сигнатура PK.
Отказ и граница проверки. сначала проверяется заявленный тип результата. Формат должен принадлежать дескриптору этой книги; используйте именованные константы и передавайте полученный resource только совместимым методам.
Полный официальный текст карточки на английском
Purpose: Vtiful\Kernel\Format underline
Description Vtiful\Kernel\Format underline format
Return: Return Values Resource
Источники и обсуждения
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


