Excelファイル読み込み方法

PHPExcelを利用して、Excelデータを読み込む方法を紹介します。

PHPExcelのインストール

PHPExcelとは、PHPでExcelの読み書きなどができるライブラリです。
Composerを利用してPHPExcelをインストールします。

PHPExcelのパッケージ情報

PHPExcelでExcelデータ取り込み

ここでは、次のデータをもつExcelファイルをPHPExcelを利用して読み込む例を紹介します。

432-php-excel.png
<?php
 
header("Content-Type: text/html; charset=UTF-8");
 
// Composerでインストールしたパッケージを読み込みます。環境に合わせて変更してください。
require_once(realpath(__DIR__) . "/../../../composer_pj1/vendor/autoload.php");

// 読み込むExcelファイルを指定して、PHPExcelオブジェクトを生成します。
// 今回は実行プログラムと同一ディレクトリにある「text.xlsx」を読み込みます。
$filepath = __DIR__ . "/test.xlsx";
$phpexcel = PHPExcel_IOFactory::load($filepath);

// 読み込みたいシートを設定し、PHPExcel_Worksheetオブジェクトを生成します。 
$phpexcel->setActiveSheetIndex(0);
$sheet = $phpexcel->getActiveSheet();
 
$sheetData = array();

// 行イテレータで各行のPHPExcel_Worksheet_Rowオブジェクトを繰り返し取得していきます。
foreach ($sheet->getRowIterator() as $row) {
    $tmp = array();
    
    // 列イテレータで各列のPHPExcel_Cellオブジェクトを繰り返し取得していきます。
    foreach ($row->getCellIterator() as $cell) {
        // セルの値を取得します。
        $val = $cell->getValue();
        $format = $cell->getStyle()->getNumberFormat()->getFormatCode();
 
        // Excelでは、日付や時刻をシリアル値として管理しています。
        if ($format === "mm-dd-yy") {
            $val = PHPExcel_Style_NumberFormat::toFormattedString($val, PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
        } elseif ($format === "h:mm") {
            $val = PHPExcel_Style_NumberFormat::toFormattedString($val, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3);
        }
        $tmp[] = $val;
    }
    $sheetData[] = $tmp;
}
 
var_dump($sheetData);
array (size=4)
  0 => 
    array (size=5)
      0 => string '文字列A' (length=10)
      1 => string '文字列B' (length=10)
      2 => string '文字列C' (length=10)
      3 => string '日付' (length=6)
      4 => string '時刻' (length=6)
  1 => 
    array (size=5)
      0 => string 'あああああ' (length=15)
      1 => string '佐藤' (length=6)
      2 => string 'apple' (length=5)
      3 => string '2015-08-21' (length=10)
      4 => string '22:55' (length=5)
  2 => 
    array (size=5)
      0 => string 'いいいいい' (length=15)
      1 => string '鈴木' (length=6)
      2 => string 'orange' (length=6)
      3 => string '2015-09-11' (length=10)
      4 => string '11:25' (length=5)
  3 => 
    array (size=5)
      0 => string 'ううううう' (length=15)
      1 => string '高橋' (length=6)
      2 => string 'melon' (length=5)
      3 => string '2015-08-17' (length=10)
      4 => string '8:05' (length=4)

シリアル値

Excel上の表示 シリアル値
2015-08-21 42237
22:55 0.95486111111111

そのため日付や時刻の場合、フォーマット処理をしています。