Laravelで、Excelファイルを作成し、ダウンロードする方法(テンプレート使用)

「PhpSpreadsheet」というPHP対応のExcel操作ライブラリを利用しました。

LaravelにインストールしたPhpSpreadsheetで、Excelファイルを作成し、それをPCにダウンロードする方法を調べました。

Excelファイルは、Excelテンプレートを用意しておき、セルに値を代入することで、作成します。

大まかな手順は、以下となります。

  1. LaravelにExcelテンプレートを設置
  2. Excelテンプレートのセルに値を代入し、Excelファイルを作成
  3. Excelファイルを、PCにダウンロード

 

Excelテンプレートの読み込みから、Excelファイルを作成するまでは、PhpSpreadsheetを利用しました。

  • PHP上の各種Excel操作は、PHPSpreadsheet を利用

 

 

 

準備(php-zip, Composerアップデート)

Php-zipやComposerをアップデートしないと、PhpSpreadsheetのインストールに失敗します。

最初に、これらをアップデートします。

 

Composer は、既に、以下の位置にインストール済みとします【注1】。

【注1】Composer のインストールがまだの場合は、記事記事「さくらのVPS:Laravel デプロイ」を、ご参照ください。

 

以下のコマンドで、php-zip をアップデートします。

ここで、www# はコマンドプロンプトです。wwwは現在のログイン位置を、#はルートでのログインを、表しています。

 

そして、以下のコマンドで、composerをアップデートします。

 

 

Laravelインストール

プログラム名「sample」で、Laravel をインストールします【注2】。

 

【注2】Laravel インストールの詳細は、記事「さくらのVPS:Laravel デプロイ」を、参照してください。

 

今回、composer, artisanは以下の位置にあります。

 

Laravel のバージョンを確認します。

例えば、Laravel Framework5.8.16 などと、返ってきます。

 

 

PhpSpreadsheetインストール

次に、PhpSpreadsheetをインストールします【注3】。

 

【注3】この辺りは、参考資料1. に準拠しています。詳細は、参考資料1. をご参照ください。

 

 

template.xlsx設置

次に、テンプレートとなるExcelファイル(template.xlsx)を設置します【注4】。

  1. PCからサーバーに、template.xlsx をアップロード
  2. publicファルダ内に、excelフォルダを作成
  3. そこにtemplate.xlsxを設置

 

【注4】この辺りは、参考資料1. に準拠しています。詳細は、参考資料1. をご参照ください。

 

 

プログラミング

次に、web.phpを修正し、HomeController.phpを新規作成します【注5】。

【注5】この辺りは、参考資料1.2.3. に準拠しています。詳細は、参考資料1.2.3. をご参照ください。

 

sample/routes/web.php の修正

 

プログラム1.web.php

 

ソースの説明

(a)Laravelをインストールしたに、Laravelにアクセスすると、「welcome」が表示されます。

この部分は、コメントアウトします。

(b)Laravelにアクセスすると、HomeControllerオブジェクトのindexメソッドが動きます

 

 

sample/app/Http/Controllers/HomeController.php の作成

 

プログラム2.HomeController.php

 

ソースの説明

(a)load()関数で、テンプレート(template.xlsx)を、$spreadsheetに読み込む

(b)$spreadsheetの1枚目のシート(ActiveSheet)を、$sheet に代入

(c)$sheetのセル(’I4’)に、 ‘aaa bbbb’ を、セットする’’

  • フォント特性(名、サイズ、色、など)や、セル結合などは、テンプレートに設定済み
  • 同様に、セル(’I11’, ’J11’, ’P11’)に、値をセット

(d)各セルに値を設定したExcelファイルを、以下の場所に書き出す

(e)output.xlsxを、PCにファイル名(filename.xlsx)でダウンロードする

(f)ダウンロード後、output.xlsxを、excelフォルダから削除する

 

 

 

Web 経由での動作確認

ブラウザーで、URL(http://111.22.333.44/)にアクセスすると、プログラム が動きます【注6】。

 

【注6】ip アドレス(111.22.333.44)は、適宜、各自の ip アドレスに読み替えてください。

  • http://111.22.333.44

 

ランタイムエラー(permission denied)

このまま、URL(http://111.22.333.44/)【注6】にアクセスすると、excelフォルダに書き込みできないとのエラーになります。

そこで、以下のコマンドを実行します。

 

コマンドの詳細は、記事「さくらのVPS:Laravel デプロイ」を、参照してください。

 

 

 

参考資料

  1. ハマログ:PhpSpreadsheetとTcpdfでExcelファイルから日本語PDFを作成してみる(そして失敗する)
  2. 書籍:PHPフレームワーク Laravel Webアプリケーション開発:ダウンロードレスポンス
  3. Qiita:Content-Typeの一覧

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。