https://github.com/PHPOffice/PHPExcel
https://packagist.org/packages/phpoffice/phpexcel
試しに、OpenOfficeの表計算ドキュメントを読み込んでみました。
1. PHPExcelをインストールします。以下はcomposer.jsonの例です。
{ "require": { "phpoffice/phpexcel": "1.*" } }
2. 1シートのみを前提で読み込んでます。
シートはこんな感じです。
* 面倒なので直しませんが"テストB5"じゃなくて"テストB6"でしたね。。。
<?php require_once('vendor/autoload.php'); $ods = PHPExcel_IOFactory::load("test.ods"); $ods->setActiveSheetIndex(0); $sheet = $ods->getActiveSheet(); $highestRowIndex = $sheet->getHighestRow(); $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); $data = []; for ($i = 1; $i <= $highestRowIndex; $i++) { $values = []; for ($j = 0; $j < $highestColumnIndex; $j++) { $values[] = $sheet->getCellByColumnAndRow($j, $i)->getValue(); } $data[] = $values; } var_dump($data);結果です。
array(6) { [0]=> array(4) { [0]=> string(11) "テストA1" [1]=> string(11) "テストB1" [2]=> NULL [3]=> string(11) "テストD1" } [1]=> array(4) { [0]=> string(11) "テストA2" [1]=> string(11) "テストB2" [2]=> NULL [3]=> NULL } [2]=> array(4) { [0]=> NULL [1]=> NULL [2]=> string(11) "テストC3" [3]=> NULL } [3]=> array(4) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL } [4]=> array(4) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL } [5]=> array(4) { [0]=> NULL [1]=> string(11) "テストB5" [2]=> NULL [3]=> NULL } }
3. 複数シートの場合もやってみました。
シート構成は意地悪な感じで
- 1シート目は先程と同様
- 2シート目は空
- 3シート目は空
- 4シート目はこんな感じです
- 5シート目は空
です。
ソースです。
<?php require_once('vendor/autoload.php'); $ods = PHPExcel_IOFactory::load("test.ods"); $allData = []; $sheets = $ods->getAllSheets(); foreach ($sheets as $sheet) { /** @var PHPExcel_Worksheet $sheet */ $highestRowIndex = $sheet->getHighestRow(); $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); $data = []; for ($i = 1; $i <= $highestRowIndex; $i++) { $values = []; for ($j = 0; $j < $highestColumnIndex; $j++) { $values[] = $sheet->getCellByColumnAndRow($j, $i)->getValue(); } $data[] = $values; } $allData[] = $data; } var_dump($allData);結果です。
array(6) { [0]=> array(6) { [0]=> array(4) { [0]=> string(11) "テストA1" [1]=> string(11) "テストB1" [2]=> NULL [3]=> string(11) "テストD1" } [1]=> array(4) { [0]=> string(11) "テストA2" [1]=> string(11) "テストB2" [2]=> NULL [3]=> NULL } [2]=> array(4) { [0]=> NULL [1]=> NULL [2]=> string(11) "テストC3" [3]=> NULL } [3]=> array(4) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL } [4]=> array(4) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL } [5]=> array(4) { [0]=> NULL [1]=> string(11) "テストB5" [2]=> NULL [3]=> NULL } } [1]=> array(1) { [0]=> array(1) { [0]=> NULL } } [2]=> array(1) { [0]=> array(1) { [0]=> NULL } } [3]=> array(6) { [0]=> array(4) { [0]=> NULL [1]=> string(11) "テストB1" [2]=> string(11) "テストC1" [3]=> NULL } [1]=> array(4) { [0]=> string(11) "テストA2" [1]=> string(11) "テストB2" [2]=> string(11) "テストC2" [3]=> NULL } [2]=> array(4) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> string(11) "テストD3" } [3]=> array(4) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL } [4]=> array(4) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL } [5]=> array(4) { [0]=> NULL [1]=> NULL [2]=> string(11) "テストC6" [3]=> NULL } } [4]=> array(1) { [0]=> array(1) { [0]=> NULL } } [5]=> array(1) { [0]=> array(1) { [0]=> NULL } } }簡単ですね。複数シートの場合、どうも1シート分余計なデータが有りますが、まあどうにでもなるかなと思います。
No comments:
Post a Comment