PHPでExcelを読み書きできるPhpSpreadsheetの使い方・サンプルコード

最終更新日: 公開日: 2023年12月

前回はPHPでExcelを読み書きできるPhpSpreadsheetのインストールと簡単な使い方を説明しました。
今回はより詳しい使い方を説明します。

Excelファイルをインポートする

既存のExcelファイルを読み込み、それをテンプレートとして使うことが可能です。
プログラム側で動的に設定する必要のないレイアウト部分などを整えたテンプレート用Excelファイルを用意しておくことで、無駄なプログラムを省くことができます。

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;

$reader = new XlsxReader();
$spreadsheet = $reader->load('インポートしたいExcelファイルのパス');
$sheet = $spreadsheet->getSheetByName('sheet1'); // 読み込むシートを指定

// セルに文字を入力
$sheet->setCellValue('A1', 'ABC');

// Excelファイルの書き出し
$writer = new XlsxWriter($spreadsheet);
$writer->save('ABC.xlsx');

XlsxReader::load() でインポートしたいExcelを指定して読み込み、A1に文字を設定して書き出しをしています。

Excelファイルをダウンロードさせる

サーバに保存するのではなく、Web上でダウンロードさせる方法です。
前述のExcel書き出し部分を以下のようにします。

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;');
header('Content-Disposition: attachment; filename="任意のファイル名"');
$writer = new XlsxWriter($spreadsheet);
$writer->save('php://output');

Excelの保存部分のコードを、

$writer->save('php://output');

とすることで、レスポンスBodyとしてExcelを出力しています。

罫線を引く

罫線を引く方法はいろいろありますが、実際にExcelで罫線を引くとき、「範囲選択 → 適用する罫線を選択」という操作をすることがほとんどだと思います。
その操作感に近いやり方で罫線を引く方法を紹介します。

選択範囲全体に「2重線」「赤色」の罫線を引くコードは以下のようになります。
※これまでのコードで登場したクラスの読み込みや $sheet の代入などは省略しています。

use PhpOffice\PhpSpreadsheet\Style\Border;

$styles = [
  'borders' => [
    'allBorders' => [
      'borderStyle' => Border::BORDER_DOUBLE,
      'color' => ['argb' => 'FFFF0000'],
    ],
  ],
];

$sheet->getStyle('A1:C3')->applyFromArray($styles);

applyFromArray() は連想配列で渡したスタイル設定を、指定した範囲に適用するための汎用メソッドです。
今回は罫線だけ適用したいので、'borders'の設定だけ配列にセットしています。

'allBorders' は選択範囲内のすべてのセルの枠線を対象に罫線を適用します。
他にも「top(上)」「right(右)」「bottom(下)」「left(左)」「outline(外側全体)」などが指定可能です。
https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#styling-cell-borders

'borderStyle' は罫線の種類の指定です。
罫線の種類はBorderクラスに定数として定義されています。
https://phpoffice.github.io/PhpSpreadsheet/classes/PhpOffice-PhpSpreadsheet-Style-Border.html

'color' はそのまんま、色の指定です。
サンプルコードのようにargbでの指定もできますし、こちらもColorクラスに定数がありますので、そちらを指定することも可能です。
https://phpoffice.github.io/PhpSpreadsheet/classes/PhpOffice-PhpSpreadsheet-Style-Color.html

画像を挿入する

画像の挿入も非常に簡単で、Drawingクラスを使用します。

use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
$drawing = new Drawing();
$drawing->setPath('挿入したい画像のパス');
$drawing->setCoordinates('A1');
$drawing->setWidth(100);
$drawing->setHeight(50);
$drawing->setWorksheet($sheet);

setPath() は挿入したい画像パスの指定です。
setCoordinates() は画像の挿入位置です。このコードだとA1の左上に、画像の左上部分がくるように挿入されます。
ちなみに、さらにその座標からずらした位置に挿入したい場合は、setOffsetX(xx)setOffsetY(yy)というメソッドで、座標を調整することが可能です。
setWidth()setHeight() は幅と高さの指定です。
最後の setWorksheet() は挿入するワークシートの指定です。

このほかにも様々なプロパティが存在しますので、詳しくは公式ドキュメントをご参照ください。
https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#add-a-drawing-to-a-worksheet

 

Contact

ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.

 
   
contact
Pagetop