勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PhpSpreadsheetで文字色の変更、太字化、セルの色の変更を行う方法

  PHP

以前PHPとPhpSpreadsheetを用いてExcelシートを出力する方法をメモしたが、これに加えてシート内の特定文字の色変更・太字化や特定セルの色の変更を行いたかった。以下に対応方法をメモ。

 

PhpSpreadsheet

公式サイト

https://phpspreadsheet.readthedocs.io/en/latest/

GitHub

https://github.com/PHPOffice/PhpSpreadsheet

ライブラリのインストール

サーバにSSH接続し、以下コマンドでインストールする。

composer require phpoffice/phpspreadsheet

 

対応方法

ソースコード

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;

use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;

//スプレッドシートを作成
$spreadsheet = new Spreadsheet();

//シート作成
$spreadsheet->getActiveSheet('sheet1')->UnFreezePane();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle("シート名");

//タイトルを設定
$sheet->setCellValue('A1', '名前');
$sheet->setCellValue('B1', '年齢');


//セルの背景色を変更
$sheet->getCell('A1')->getStyle()->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FFFFFF00');

//太字且つ文字色を変更
$sheet->getStyle('B1')->getFont()->setBold(true)->getColor()->setARGB('FFFFFF00');


//値を設定
$data = array(
    0 => array('山田', 20,),
    1 => array('鈴木', 30,),
    2 => array('佐藤', 40,),
    3 => array('田中', 50,),
    4 => array('藤井', 60,),
);
$sheet->fromArray($data, NULL, 'A2', true);


//バッファをクリア
ob_end_clean();

//ファイル名
$fileName = "test.xlsx";

//ダウンロード
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$fileName.'"');
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: cache, must-revalidate');
header('Pragma: public');

$writer = new Xlsx($spreadsheet);
$writer->save('php://output');

exit();

解説等

以前と異なる点として12~13行目で以下の通りnamespaceの指定、

use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;

28~32行目で文字やセルの装飾を行っている。

//セルの背景色を変更
$sheet->getCell('A1')->getStyle()->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FFFFFF00');

//太字且つ文字色を変更
$sheet->getStyle('B1')->getFont()->setBold(true)->getColor()->setARGB('FFFFFF00');

尚、ARGBは最初の2桁が透明度指定になり、残りの6桁は普通のカラーコードになる。

 - PHP

  関連記事

PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法

PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...

PHPでExcelシートを出力する方法(PhpSpreadsheet)

PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在 ...

PhpSpreadsheetでセル内の文字列の改行、セル幅の自動調整を行う方法

以前PHPとPhpSpreadsheetを用いてExcelシートを出力する方法を ...

PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法

以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...

PhpSpreadsheetでExcelファイルを読み込みPHPの配列として取り扱う方法

formからCSVファイルをアップロードし、PHPの配列に格納後、データベース登 ...