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