В проекте PHPOffice Есть два проекта, связанные с форматами файлов электронных таблиц:
PHPExcel — это библиотека, написанная на чистом PHP и предоставляющая набор классов, которые позволяют писать и читать из различных форматов файлов электронных таблиц, таких как Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre / OpenOffice Calc .ods, Gnumeric, PDF, HTML, … Этот проект основан на стандарте Microsoft OpenXML и PHP.
а также
PhpSpreadsheet — это библиотека, написанная на чистом PHP и предоставляющая набор классов, которые позволяют вам читать и писать в различные форматы файлов электронных таблиц, такие как Excel и LibreOffice Calc.
Каковы основные различия между ними?
В течение многих лет PHPExcel поддерживался как библиотека для работы с файлами электронных таблиц, и его заковали в тупик, сохранив поддержку более старых версий PHP (> = 5.2), что делает его очень трудным для продвижения вперед и его улучшения. Это стабильная библиотека, но дальше развиваться не будет.
PHPSpreadsheet — это новейшая версия PHPExcel, и большая ее часть была переписана с целью использования преимуществ новых функций PHP. Сохраняя все функциональные возможности PHPExcel, для него требуется минимальная версия PHP 5.5 (и вскоре она будет удалена, чтобы потребовать минимум 5.6).
Изменение в названии библиотеки должно было отражать тот факт, что оно не ограничивается электронными таблицами Excel; но поддерживает более широкий диапазон форматов файлов электронных таблиц.
Дальше к Марк Бейкер ответ выше, есть многочисленные архитектурные и синтаксические изменения в том, как используется новая библиотека PhpSpreadsheet.
Во-первых, обратите внимание, что есть включенный инструмент миграции, который выполняет многие из PhpExcel -to- PhpSpreadsheet синтаксические изменения для вас.
(1) Самое важное изменение: PhpSpreadsheet опирается на Композитор устанавливается
Composer, вдохновленный npm-узлом и пакетом ruby, не является менеджером пакетов в том же смысле, что и 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 Роб Гравелль из Оттавы