輝く僕らの学費

外の空気が大好き、そこそこ忙しい理系の男子大学生のぶちおです。

未分類

PHPでExcelファイル(xls)を読み取って扱う

投稿日:2018年3月20日 更新日:

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->getActiveSheet()->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をサクッと導入できなかったからだ。

便利なツールを使いこなしてこそカッコいい効率のいいプログラマでしょう!

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

ちばらき民の俺が夜にドライブで行きたいところリスト

養老川臨海公園 舞浜 お台場 イタリア街 品川埠頭 筑波山 大慶園 柏ドンキ 日川浜鹿島工業団地 スターバックスつくば店 成田空港さくらの山

no image

いま使っている松井証券と楽天証券の各手数料のまとめ

楽天証券が2017年末あたりに手数料の改定があり、使う機会も出てきそうなので、いま使っている松井証券の手数料等と一緒にまとめておく。

no image

Yeti(イエティ)の費用比較

直行バス 新宿駅 参考:何年か前の価格 レンタカー 車代 車12H 7290円 4WD料金 1,620円(税込) スタッドレス 1,620円 スキーキャリア 756円 ガソリン代 片道距離160km …

no image

k-dbの終了

僕の個人的な最大なプロジェクトは、「自分にとって使いやすい株の分析ツール開発」ですが、それにおいてすごく基礎的な部分、株価の過去データを集めるという課題。 それをうまくこなすために欠かせない株価の取得 …

no image

ちばらき民の俺が日帰りドライブで行きたいところリスト

野島崎灯台 千葉県の最南端なスポット。千葉県の南の方は海水の透明度も高くて綺麗って言われてるから行きたい。 高速料金が片道2000円ぐらいで2時間半ぐらいかかる。 約150キロ 海ほたる 2時間半ぐら …