web-dev-qa-db-ja.com

PHPExcelとPhpSpreadsheetの主な違いは何ですか?

PHPOffice のプロジェクトには、スプレッドシートファイル形式に関連付けられた2つのプロジェクトがあります。

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などのさまざまなスプレッドシートファイル形式を読み書きできるクラスのセットを提供します。

それらの主な違いは何ですか?

17
simhumileco

PHPExcelは、スプレッドシートファイルを操作するためのライブラリとして長年にわたって維持されており、古いバージョンのPHP(> = 5.2)のサポートを維持することにより、前進が非常に困難になっています安定したライブラリですが、これ以上開発されません。

PHPSpreadsheetはPHPExcelの最新バージョンであり、その大部分はPHPの新しい機能を利用するように書き直されています。 PHPExcelのすべての機能を保持しながら、最小のPHPバージョン5.5が必要です(まもなく、最小の5.6が必要になるため削除されます)。

ライブラリ名の変更は、Excelスプレッドシートに限定されないという事実を反映するためのものでした。幅広いスプレッドシートファイル形式をサポートしています。

25
Mark Baker

上記の Mark Ba​​ker's の回答に加えて、新しいPhpSpreadsheetライブラリの使用方法には、アーキテクチャ上および構文上の多くの変更があります。

最初に、PhpExcel -to- PhpSpreadsheetあなたのための構文上の変更。

変更の非網羅的な要約:

(1)最も重要な変更:PhpSpreadsheetは Composer のインストールに依存しています。

ノードのnpmとRubyのバンドラーに強く触発されたComposerは、YumまたはAptと同じ意味でのパッケージマネージャーではありません。および/またはライブラリは、プロジェクトごとに依存関係を管理し、プロジェクト内のディレクトリ(通常は「ベンダー」という名前)にインストールするため、より純粋な依存関係マネージャーです。デフォルトでは、グローバルには何もインストールしません。 (ただし、グローバルコマンドを介して便宜上「グローバル」プロジェクトをサポートしています。)

Composerを使用せずにPhpSpreadsheetを使用することは可能ですが、ここに その方法に関するいくつかの考え があります。 mavensからの直接のより多くの考え この同じトピックに関するものです。

FWIW、私はチケットを開きました 私のウェブホストで と10分以内にComposerが共有ホスティングにインストールされていました(Greenあなたは同じ幸運があると言っているわけではありませんが、おそらく逸話的な情報が役立つでしょう。あなたのウェブホストで試してみる価値があります。

(2)名前空間が導入されました

PhpExcel以来、PhpSpreadsheetのコード側も進化しています。 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クラスは完全に削除され、composer= autoloading mechanism。

(8)PDFライブラリはcomposerを介してインストールする必要があります。PHPExcel_Settings::get/setPdfRenderer()メソッドは削除され、代わりにIOFactory :: registerWriter()に置き換えられました。

(9)HTMLまたはPDF出力のチャートをレンダリングするとき、プロセスも簡素化されました。JpGraphサポートはまだ利用可能ですが、残念ながら最新のPHPバージョン。さまざまな警告が生成されます。

(10)より完全で最新の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から始まる行および列Aに対して1を返すExcel関数COLUMN()と一致しています。

(15)多くのメソッドのデフォルト値は、意味をなさないときに削除されました。通常、セッターメソッドにはデフォルト値を設定しないでください。

(16)条件付きで返されるセルのドロップ...返される値のタイプを変更することはできなくなりました。 Worksheet::setCellValue()Worksheet::setCellValueExplicit()などのメソッドでは、常にWorksheetを返し、CellまたはRuleは返しません。例:

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

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

これらの変更の詳細については、以下のソースドキュメントを参照してください。

参照:

PhpSpreadsheet Docs-PhpExcelからの移行 -readthedocs.io

PhpExcelからPhpSpreadsheetへの切り替え オタワのロブ・グラヴェル

5
cssyphus