Подтвердить что ты не робот

Каковы основные различия между PHPExcel и PhpSpreadsheet?

В проекте PHPOffice есть два проекта, связанных с форматами файлов электронных таблиц:

PHPExcel

PHPExcel - это библиотека, написанная на чистом PHP и предоставляющая набор классов, которые позволяют писать и читать из различных форматов файлов электронных таблиц, таких как Excel (BIFF).xls, Excel 2007 (OfficeOpenXML).xlsx, CSV, Libre/OpenOffice Calc.ods, Gnumeric, PDF, HTML,... Этот проект построен на основе стандарта Microsoft OpenXML и PHP.

а также

PhpSpreadsheets

PhpSpreadsheet - это библиотека, написанная на чистом PHP и предоставляющая набор классов, которые позволяют вам читать и записывать файлы в различных форматах электронных таблиц, таких как Excel и LibreOffice Calc.

Каковы основные различия между ними?

4b9b3361

Ответ 1

В течение многих лет PHPExcel поддерживался как библиотека для работы с файлами электронных таблиц и был закован в канву, поскольку поддерживал более старые версии PHP (> = 5.2), что очень затрудняло его продвижение и улучшение. Это стабильная библиотека, но дальше развиваться не будет.

PHPSpreadsheet - это новейшая версия PHPExcel, большая часть которой была переписана для использования новых возможностей PHP. Сохраняя все функциональные возможности PHPExcel, для него требуется минимальная версия PHP 5.5 (и вскоре она будет удалена, чтобы потребовать минимум 5.6).

Изменение в названии библиотеки должно было отражать тот факт, что оно не ограничивается электронными таблицами Excel; но поддерживает более широкий диапазон форматов файлов электронных таблиц.

Ответ 2

В дополнение к ответу Марка Бейкера, приведенному выше, в архитектуру PhpSpreadsheet внесены многочисленные архитектурные и синтаксические изменения.

Во-первых, обратите внимание, что есть включенный инструмент миграции, который выполняет многие синтаксические изменения PhpExcel-to-PhpSpreadsheet за вас.

Неисчерпывающая сводка изменений:

(1) Самое важное изменение: PhpSpreadsheet зависит от установленного Composer.

Вдохновленный узлами npm и ruby bundler, Composer не является менеджером пакетов в том же смысле, что и Yum или Apt. Хотя он работает с "пакетами" и/или библиотеками, он является более чистым менеджером зависимостей, так как он управляет зависимостями для каждого проекта, устанавливая их в каталоге (обычно называемом "vendor") внутри вашего проекта. По умолчанию он ничего не устанавливает глобально. (Однако для удобства он поддерживает "глобальный" проект с помощью глобальной команды.)

Можно использовать PhpSpreadsheet без Composer, и вот несколько мыслей о том, как это сделать. Вот еще мысли от мавенов на эту же тему.

FWIW, я открыл тикет со своим веб-хостом и через 10 минут получил ответ, что Composer был установлен на нашем общем хостинге (план Green, для тех, кому интересно). Не говоря о том, что у вас будет такая же удача, но, возможно, информация из анекдота поможет вам. Стоит попробовать с вашим веб-хостингом.

(2) Пространства имен были введены

Кодовая сторона PhpSpreadsheet развивалась и с PhpExcel. Принимая во внимание, что класс точки входа PhpExcel - Classes/PHPExcel.php - отражает его тезку, PhpSpreadsheet включает файл autoload.php в корне каталога вендора. Он также использует некоторые пространства имен для упрощения кодирования:

<?php
   use PhpOffice\PhpSpreadsheet\IOFactory;
   use PhpOffice\PhpSpreadsheet\Spreadsheet;
   require_once 'vendor/autoload.php';

(3) Читатели и писатели были переименованы

(4) Значительно изменились короткие имена читателей/писателей. Например:

'Excel2003XML' ==> 'Xml' *the leading capital letter is mandatory !*
'Excel2007'    ==> 'Xlsx'
'Excel5'       ==> 'Xls'
'HTML'         ==> 'Html'
'CSV'          ==> 'Csv'   etc.

Вы заметили, что первая буква заглавная? Необходимые.

(5) Методы IOFactory были упрощены:

PHPExcel_IOFactory::getSearchLocations()  ==> replaced by ==>  IOFactory::registerReader()
PHPExcel_IOFactory::setSearchLocations()  ==> replaced by ==>  IOFactory::registerWriter()
PHPExcel_IOFactory::addSearchLocation()

Например,

\PHPExcel_IOFactory::addSearchLocation($type, $location, $classname);   <=== PhpExcel

\PhpOffice\PhpSpreadsheet\IOFactory::registerReader($type, $classname); <=== PhpSpreadsheet

(6) Другие изменения/Устаревшие:

Worksheet::duplicateStyleArray()
DataType::dataTypeForValue()
Conditional::get/setCondition()
Worksheet::get/setDefaultStyle()
Worksheet::get/setSelectedCell()
Writer\Xls::setTempDir() <==== functionality dropped

(7) Класс PHPExcel_Autoloader был полностью удален и заменен механизмом автозагрузки композитора.

(8) Библиотеки PDF должны быть установлены через композитор. PHPExcel_Settings::get/setPdfRenderer() были удалены и заменены на IOFactory :: registerWriter().

(9) При рендеринге диаграмм для вывода в формате HTML или PDF этот процесс также был упрощен. И хотя поддержка JpGraph все еще доступна, к сожалению, она не обновлена до последних версий PHP и будет выдавать различные предупреждения.

(10) Поддержка PclZip была прекращена в пользу более полного и современного расширения PHP ZipArchive. Так много изменений в этих классах.

(11) Кэширование клеток подверглось сильному рефакторингу для использования PSR-16. Это означает, что большинство классов, связанных с этой функцией, были удалены.

(12) Клавиши массива, используемые для стилевого оформления, были стандартизированы для более согласованного восприятия. Теперь он использует ту же формулировку и регистр, что и геттер и сеттер

(13) Методы для управления координатами в PHPExcel_Cell были извлечены в новый выделенный класс \PhpOffice\PhpSpreadsheet\Cell\Coordinate. Методы включают в себя:

absoluteCoordinate()
absoluteReference()
columnIndexFromString()
coordinateFromString()
buildRange()
... and half-a-dozen more ...

(14) Индексы столбцов теперь основаны на 1. Таким образом, столбец A - это индекс 1. Это согласуется со строками, начинающимися с 1, и функцией Excel COLUMN(), которая возвращает 1 для столбца A.

(15) Значения по умолчанию для многих методов были удалены, когда это не имело смысла. Как правило, методы установки не должны иметь значения по умолчанию.

(16) Отброшенная условно возвращаемая ячейка... Больше невозможно изменить тип возвращаемого значения. Он всегда возвращает рабочий лист, а не ячейку или правило, в таких методах, как: Worksheet::setCellValue(), Worksheet::setCellValueExplicit() и т.д. Например, для:

$cell = $worksheet->setCellValue('A1', 'value', true);  <==== PhpExcel

$cell = $worksheet->getCell('A1')->setValue('value');   <==== PhpSpreadsheet

Дополнительные сведения об этих изменениях см. В исходном документе ниже.

Рекомендации:

Документы PhpSpreadsheet - миграция с PhpExcel - readthedocs.io

Переход от PhpExcel к PhpSpreadsheet Робом Гравеллом из Оттавы