Ответ 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 Робом Гравеллом из Оттавы