PHPでExcelのファイルを、読み取って配列に格納して使いたい。
使いたいExccelファイル
比較的シンプルな一覧のようなExcelファイル。なんならCSVでくれよって正直思う。セルの結合などもなく扱いやすそうだ。
実際に、使いたいのが「東証上場銘柄一覧」で、銘柄コードと、銘柄名、業種などを取得していきたい。4000行弱もある。
直近月末のデータが、毎月第3営業日の午前9時以降に掲載されている。定期実行させて取りに行かせる。
PHPでExcelファイルを使うライブラリ
xlsファイルがどんな風に記述されているかは、知っておくと役に立ちそうだけど、今回はライブラリに頼ります。
php-excel
PhpSpreadsheet
この2つの比較とかもここにそれっぽい記事のリンクがあったので参考になりそう。
使ってみた
とりあえず情報の多かったPHP-Excelで、データを配列に格納するシンプルなコード
// ライブラリの読み込み require_once 'Classes/PHPExcel.php'; // ファイル名の指定 $readFile = "data_j.xls"; // ファイルの存在チェック if (!file_exists($readFile)) { echo($readFile . "が見つかりません。"); } // xlsをPHPExcelで読み込む $objPExcel = PHPExcel_IOFactory::load($readFile); // 配列で返す $arr = $objPExcel-&amp;gt;getActiveSheet()-&amp;gt;toArray(null, true, true, true); // 配列のばーだんぷする echo '<pre>'; var_dump($arr); echo '</pre>';
実際に使用用途に合わせてみる
上記のようなコードでExcelを配列にする。
つぎに、その配列をforeachして順に処理していくと言った流れで進めていきます。
foreach($arr as $row )のようにすると
一行一行 データが入っている列を$row[‘A’]のように参照することができます。
元の配列をそのまま使う場合は$arr[0][A]といった形になるかと思います。
データの行なのかどうかの判定
ここが、自分がハマったポイントになりますが、Aの列には日付が20180228と入っています。
Aの列が、数字であればデータであると判断し、データの行だけを処理するようにします。
PHPでは、ctype_digitや、is_numericなど、数字かどうかを判定する関数があります。
ctype_digitだとうまくいかなかった…
検索したときに上に出てきたのに。
日曜大工的なプログラミングはそろそろやめよう
正直、なぜいまPHP-Excelのほうを選んだかというと、Composerを普段使っていなくてPHP-Spreadsheetをサクッと導入できなかったからだ。
便利なツールを使いこなしてこそカッコいい効率のいいプログラマでしょう!