ラボ > PHP:PhpSpreadsheet

PHPでExcelファイルとしてダウンロードしたい(PhpSpreadsheet)

「phpEXCEL」ってヤツは非推奨となり、現在だと「phpoffice/phpspreadsheet」ってのを使うのが良いらしい。

作成日:2020-07-20, 更新日:2020-07-20

インストから単純な出力まで

・composerのインスト
・composerで「phpspreadsheet」をインスト
・実行(「Hello World」をExcelファイルに出力)
※Gitからダウンロードして使おうとしたけど、挫折。素直にcomposerでインスト。

composerのインスト

1.composerのサイトからダウンロード
2.実行

composerで「phpspreadsheet」をインスト

※Win(Xampp)の場合、CMDで実行(PowerShellだとエラーになる・・・と思う)。

composer require phpoffice/phpspreadsheet

▼ドキュメント、サンプルも必要なとき(未調査)

composer require phpoffice/phpspreadsheet --prefer-source

実行(「Hello World」をExcelファイルに出力)

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');

$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');

「セルA1」に「Hello World !」と記載された「hello world.xlsx」というファイル名のExcelファイル出力される

サーバにupしたExcelファイルを雛形にする

▼やりたいこと
1.サーバにExcelファイルをupしておくので、雛形として使いたい
2.「1」の任意のシート・セルに値をセット
3.任意の場所に別名保存(出力)

▼ひとまず「Hello World」で出力されたファイルを雛形にしてみる

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;

if ( !defined('DS') ) {
  define('DS', DIRECTORY_SEPARATOR);
}

// upしたExcelファイルのPATH、対象にするシート、出力先のPATH
$use_file_path    = __DIR__.DS.'hello world.xlsx';
$use_excel_sheed  = 'Worksheet';
$output_file_path = __DIR__.DS.'rewrite.xlsx';

// Excelファイルの読み込み
$filePath = $use_file_path;
$reader = new XlsxReader();
$excel = $reader->load($filePath);

// シートの指定
$sheet = $excel->getSheetByName($use_excel_sheed);

// セルに値を追加
$sheet->setCellValue('A2', 'ほげほげ');
$sheet->setCellValue('A3', 'hoge');

// サーバに出力
$writer = new XlsxWriter($excel);
$writer->save($output_file_path);

ダウンロードする

▼出力させるトコを下記に変更

$dl_file_name = 'dl_hello_world.xlsx';

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;');
header('Content-Disposition: attachment; filename="'.$dl_file_name.'"');
header('Cache-Control: max-age=0');
$writer = new XlsxWriter($excel);
$writer->save('php://output');
exit;

Gitや資料

PHPOffice / PhpSpreadsheet
official documentation
API documentation