Как читать и писать файлы электронных таблиц в PHP
Работая над веб-приложениями, мы часто сталкиваемся с ситуацией, когда нам нужно поиграть с файлами электронных таблиц. Мы можем читать данные из электронных таблиц и обрабатывать их. Иногда также требуется создавать и записывать файлы электронных таблиц.
В этой статье мы изучаем, как читать и писать файлы электронных таблиц на PHP. Код, который мы собираемся объяснить, будет работать с 3 типами электронных таблиц – CSV, XLSX и ODS.
Начиная
Как разработчик, я хотел бы поэкспериментировать с различными пакетами, которые могут быть полезны для решения реальных проблем. Недавно мне попался пакет под названием box / spout. Мне понравилось, как библиотека выполняла задачи. Используя эту библиотеку, вы можете обрабатывать файлы электронных таблиц с помощью всего нескольких строк кода.
Эта библиотека способна обрабатывать файлы любого размера. Возможно, вы имеете дело с большим файлом. Во время процесса большой файл не должен занимать память и создавать проблемы с производительностью. Библиотека Spout решает эту проблему. Для обработки любого файла требуется всего 3 МБ памяти.
Перед началом работы ваш сервер должен соответствовать следующим требованиям.
- PHP версии 7.2 или выше
- Расширение PHP
php_zip
включено - Расширение PHP
php_xmlreader
включено
Пользователь может проверить, выполняются ли все вышеперечисленные требования на вашем сервере, используя этот phpinfo()
метод. Создайте временный файл PHP и поместите в него приведенный ниже оператор.
Теперь запустите этот PHP файл в браузере и вы увидите конфигурации PHP как версии, расширения и т.д. Вы должны увидеть xmlreader
и zip
расширения включены, как показано на скриншоте ниже.
Как только вы выполните требования, установите box/spout
пакет с помощью приведенной ниже команды.
composer require box/spout
Чтение и запись файлов электронных таблиц в PHP
Пакет Spout позволяет взаимодействовать с файлами XLSX, CSV и ODS. В качестве примера я пишу код для файлов XLSX.
Создайте образец файла XLSX users.xlsx
в корневом каталоге и добавьте в него несколько фиктивных записей. В моем случае в файле есть следующие записи.
Затем я напишу код в reader.php
файле, который будет читать users.xlsx
и печатать данные в нем.
reader.php
<?php
require_once 'vendor/autoload.php';
use BoxSpoutReaderCommonCreatorReaderEntityFactory;
$filePath = getcwd().'/users.xlsx';
$reader = ReaderEntityFactory::createReaderFromFile($filePath);
$reader->open($filePath);
foreach ($reader->getSheetIterator() as $sheet) {
foreach ($sheet->getRowIterator() as $row) {
$cells = $row->getCells();
foreach ($cells as $cell) {
echo $cell->getValue();
}
}
}
$reader->close();
Это так просто. Давай, попробуй.
С другой стороны, мы можем легко создать файл XLSX и записать в него данные. Создадим файл writer.php
и добавим в него код ниже.
writer.php
<?php
require_once 'vendor/autoload.php';
use BoxSpoutWriterCommonCreatorWriterEntityFactory;
use BoxSpoutCommonEntityRow;
$filePath = getcwd().'/new-users.xlsx';
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile($filePath);
// Here is data for XLSX file
$data = [
['Name', 'Email'],
['Steve', '[email protected]'],
['David', '[email protected]'],
];
foreach ($data as $d) {
$cells = [
WriterEntityFactory::createCell($d[0]),
WriterEntityFactory::createCell($d[1]),
];
$singleRow = WriterEntityFactory::createRow($cells);
$writer->addRow($singleRow);
}
$writer->close();
Приведенный выше код создает new-users.xlsx
файл в вашем корневом каталоге. Если вы откроете этот файл, вы увидите, что в него вставлено несколько строк (используемых в коде).
В случае файлов CSV и ODS вам необходимо создать $writer
объект следующим образом.
$filePath = getcwd().'/new-users.ods';
$writer = WriterEntityFactory::createODSWriter();
$filePath = getcwd().'/new-users.csv';
$writer = WriterEntityFactory::createCSVWriter();
Надеюсь, вы понимаете, как читать и писать файлы электронных таблиц на PHP. Я хотел бы услышать ваши мысли и предложения в разделе комментариев ниже.
Статьи по Теме
- Как читать файлы CSV и Excel на PHP с помощью PhpSpreadsheet
- Как экспортировать данные базы данных MySQL в Excel с помощью PHP
- Как конвертировать HTML в PDF в PHP