今日、php と Excel 間のデータ変換に関する問題が発生しました。以前は PHPExcel を使用していましたが、開発チームはもう更新しません。しかし、PhpSpreadsheet が見つかりました。
1. はじめに
純粋な PHP で書かれたライブラリで、さまざまなスプレッドシート ファイル形式の読み書きを可能にするクラスのセットを提供します
サポートされる形式
環境要件
php 5.6 以降
php_zip サポートと
php_xml のサポートと有効化
php_gd2 のサポートと有効化
インストール
> composer require phpoffice/phpspreadsheet
hello world
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World !'); $writer = new Xlsx($spreadsheet); $writer->save('hello world.xlsx');
#Example
パッケージには、vendor/phpoffice/phpspreadsheet/samples> php -S localhost:8000 -t vendor/phpoffice/phpspreadsheet/samples
2 にサンプル コードが含まれています。
ファイル タイプの読み込みについて心配する必要はありません。IOFactory// 文件路径 $inputFileName = './sampleData/example1.xls'; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
注:
これはファイルを読み込むためのものではありません。最も効率的な方法です。また、実際にファイルを Spreadsheet オブジェクトに読み取る前にローダーを構成する柔軟性がありません。 ファイルの種類がわかれば、どのリーダーを使用するかを決定できます// 文件路径 $inputFileName = './sampleData/example1.xls'; /** 创建读取器 **/ $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Gnumeric(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv(); $spreadsheet = $reader->load($inputFileName);フォーマットせずにデータを読み取るだけの必要がある場合、インスタンス リーダーの readDataOnly 属性は次のとおりです
$inputFileType = 'Xls'; $inputFileName = './sampleData/example1.xls'; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); /** 只要数据 **/ $reader->setReadDataOnly(true); $spreadsheet = $reader->load($inputFileName);
注: csv リーダーにはこの属性がありません
複数のファイルは 1 つのオブジェクトにマージされます
$inputFileType = 'Csv'; $inputFileNames = [ './sampleData/example1.csv', './sampleData/example2.csv' './sampleData/example3.csv' ]; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); /** 拿到第一个 **/ $inputFileName = array_shift($inputFileNames); $spreadsheet = $reader->load($inputFileName); $spreadsheet->getActiveSheet() ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); /** 循环读取 **/ foreach($inputFileNames as $sheet => $inputFileName) { /** 重新设置工作表索引 **/ $reader->setSheetIndex($sheet+1); /** 把文件当做一个新的工作表载入 **/ $reader->loadIntoExisting($inputFileName,$spreadsheet); /** 设置工作表标题 **/ $spreadsheet->getActiveSheet() ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); }注: 複数のワークシートの場合同じワークシート インデックスでは、ファイルが同じワークシートに追加されませんが、以前にロードされた結果が上書きされます。複数の CSV ファイルを同じワークシートにロードすることはできません。
配列に変換
ファイルは最終的に、スプレッドシート ワークシート オブジェクトと呼ぶオブジェクトにロードされます。このオブジェクトには、すべてのワークシート コレクションに関する情報が保存されます。(データ)$spreadsheet = PhpOffice\PhpSpreadsheet\IOFactory::load("new.xls"); $data = $spreadsheet ->getSheet(0) // 指定第一个工作表为当前 ->toArray(); // 转为数组 // 或者得到全部工作表的数据数组 $cells=array(); // 工作表对象有迭代器实现 foreach ( $spreadsheet->getWorksheetIterator() as $data ) { $cells = $data->toArray(); }
結論
PhpSpreadsheet は非常に優れた PHP スプレッドシート処理ツール クラスです。時間があれば追加します。 . 書き込みとエクスポート。 PHP 関連の知識の詳細については、PHP 中国語 Web サイト をご覧ください。
以上がPhpSpreadsheet に関する簡単なチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。