記事目次
クリエイターブログ/システム開発
システム開発
【PHP】Ajaxで送信したExcelをPhpSpreadsheetで読み取る
概要
jQuery Ajaxを使用してExcelファイルを送信し、PhpSpreadsheetでセルの情報を読み取るサンプルコードを紹介します。
※ 今回の例ではPHP5.6で動作確認を行っています。
インストール
公式サイトに従い、Composerを使用してPhpSpreadsheetをインストールします。
例
$ mkdir myapp
$ cd myapp
$ composer require phpoffice/phpspreadsheet
例のようにインストールを行った場合は以下のようなディレクトリツリーになると思います。
- myapp
- vendor
- phpoffice
- composer.json
- composer.lock
フロントエンド
myapp直下に”index.html”を作成して下さい。
script要素内にjQueryのAjaxを使用したファイル送信処理を記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>MYAPP</title>
</head>
<body>
<form name="myform" action="">
<input type="file" name="file">
</form>
<button type="button" id="btn1" onclick="sendExcel()">button</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
// エクセルファイル送信処理
var sendExcel = function () {
// フォームを取得しフォームデータを作成する
var formData = new FormData(document.forms.myform);
$.ajax({
method: 'POST',
url: './server.php',
processData: false,
contentType: false,
cache: false,
timeout: 50000,
data: formData
}).done(function (response) {
// 正常時の処理 ...
}).fail(function (jqXHR) {
// 異常時の処理 ...
});
};
</script>
</body>
</html>
サーバーサイド
myapp直下に”server.php”を作成して下さい。
PhpSpreadsheetを使用し、送信されたExcelファイルを読み取る処理を記述します。
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
// 送信されたファイルをphpspreadsheet読み込む
$file = $_FILES['file'];
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($file['tmp_name']);
$sheet = $spreadsheet->setActiveSheetIndex(0);
// 行ループ
// getRowIteratorの第1引数は開始行です
foreach ($sheet->getRowIterator(1) as $row_index => $row)
{
// 行内の列ループ
// getCellIteratorの第1引数は開始列です
// $cell_indexにはA,B,C...のアルファベットが格納されます
foreach ($row->getCellIterator('A') as $cell_index => $cell)
{
// セルの値を取得
$value = $cell->getValue();
// 整形された値を取得
$formated_value = $cell->getFormattedValue();
// 処理 ...
// ...
// ...
}
}
まとめ
ざっくりと書きましたが、jQuery Ajaxを使用してExcelファイルを送信し、PhpSpreadsheetで行やセルの情報を読み取る処理については、このようになります。