【spout】PHPでcsvやExcelファイルを扱う
公開:2021年02月02日
こんにちは、新人エンジニアのスズキです。
phpでcsvやxlsxを扱いたいときはありませんか?
今回はおすすめのライブラリ、spoutを紹介します。
spoutとは
spoutは、phpでcsvやxlsxを扱うためのオープンソースライブラリです。
メモリの消費が少なく、シンプルかつ軽量な動作が特徴です。
spoutの準備
spoutには、
- PHP7.1以上
- composer
- PHP拡張(php-zip, php-xmlreader)
が必要です。
順番に進めていきましょう。
# phpのインストール
apt install -y php
# composeのインストール
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
# php拡張のインストール
apt install -y php-zip php-xmlreader
# spoutのインストール
composer require "box/spout"
引用元: Composer Command-line installation
引用元: spout Installation
使用例「csvファイルからxlsxファイルへの変換」
spoutライブラリの使用例として、「csvファイルからxlsxファイルへの変換」を紹介します。
csvファイルとxlsxファイルはExcelで開くとほとんど同じように見えます。
しかし、csvファイルは「コンマ区切りのテキストファイル」であるのに対して、xlsxファイルは「圧縮されたxmlファイル群」です。
このように全くの別物の2つのファイルですが、spoutを使えば簡単に変換することができます。
今回は、
- 空のxlsxファイルを作成
- csvファイルを1行読み込み、配列に格納
- 配列から、xlsxファイルに1行書き出す
- csvファイルの最終行まで繰り返す
の手順で中身の同じxlsxファイルを作成し、変換を行います。
use Box\spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\spout\Writer\Common\Creator\WriterEntityFactory;
function csv_to_xlsx($csv_path, $xlsx_path)
{
$csv_reader = ReaderEntityFactory::createCSVReader();
$csv_reader->open($csv_path);
// 空のxlsxファイルを作成
$xlsx_writer = WriterEntityFactory::createXLSXWriter();
$xlsx_writer->openToFile($xlsx_path);
// csvファイルから1シート読み込み
foreach ($csv_reader->getSheetIterator() as $sheet) {
// 1シートから1行読み込み
foreach ($sheet->getRowIterator() as $row) {
$array = [];
// 1行から1セル読み込み
foreach ($row->getCells() as $cell) {
// 配列に格納
$array[] = $cell;
}
// 配列のデータを格納した1行を作成
$create_row = WriterEntityFactory::createRow($array);
// xlsxに1行を追加
$xlsx_writer->addRow($create_row);
}
}
$csv_reader->close();
$xlsx_writer->close();
}
さいごに
spoutライブラリは、
- 非常に少ないメモリ消費
- 軽量かつシンプルな動作
が特徴です。
大きいサイズのファイルでも簡単に扱うことができます。
phpでcsvファイルやxlsxファイルを扱う際には、ぜひ検討してみてはいかがでしょうか。
-->