クリエイターブログ/システム開発

システム開発

【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を使用したファイル送信処理を記述します。

index.html

<!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ファイルを読み取る処理を記述します。

server.php

<?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で行やセルの情報を読み取る処理については、このようになります。

最新記事

クリエイターブログの関連リンク