忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP PhpSpreadsheet エクセルのワークシートのセルに日付型データの設定と、日付スタイル設定について2(setCellValue, getStyle)


今回はさらに小ネタですが、以下の記事では、セルに PHP のUNIT-TIMEデータを日付型データとして設定し、日付の書式で表示させる方法について説明しました。
この時のセルの書込み位置指定で従来の方法で "A2" としていましたが、最近のバージョンの PhpSpreadsheet では「列No, 行No」と配列での指定が可能になった様です。

PHP PhpSpreadsheet エクセルのワークシートのセルに日付型データの設定と、日付スタイル設定について(PHPToExcel, setFormatCode)

そこで、XAMPP のPHPバージョンを「7.4.32」にアップしたのに伴って、PhpSpreadsheet のバージョンアップを行います。
まずはWindowsのコマンドプロンプトから以下のコマンドを実行します。

C:\xampp\htdocs>composer config platform.php 7.4.32

「C:\xampp\htdocs\composer.json」ファイルの内容が以下の様になります。 phpspreadsheet のバージョンはそのままです。

{
    "require": {
        "phpoffice/phpspreadsheet": "^1.8"
    },
    "config": {
        "platform": {
            "php": "7.4.32"
        }
    }
}

composer require phpoffice/phpspreadsheet

このコマンドで実行したのですが、いろいろエラーが表示されたので、「C:\xampp\htdocs\vendor」フォルダを別のものにして 「vendor」が存在しない状態で再度、上記のコマンドを実行しました。
(ちょっと強引な感じですが、更新方法が良くわからなかったので。)

「7-ZIP」という圧縮・解凍ツールがインストールされている場合は、取り敢えずアンインストールします。
(phpspreadsheet 取込の composer でファイル解凍時?にエラーになります。)

再度、コマンドを実行したら、新しく「vendor」以下が構築された様です。

C:\xampp\htdocs>composer require phpoffice/phpspreadsheet
Info from https://repo.packagist.org: #StandWithUkraine
Using version ^1.25 for phpoffice/phpspreadsheet
./composer.json has been updated
Running composer update phpoffice/phpspreadsheet
Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Installing dependencies from lock file (including require-dev)
Package operations: 11 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing myclabs/php-enum (1.8.4): Extracting archive
  - Installing psr/simple-cache (1.0.1): Extracting archive
  - Installing psr/http-message (1.0.1): Extracting archive
  - Installing psr/http-factory (1.0.1): Extracting archive
  - Installing psr/http-client (1.0.1): Extracting archive
  - Installing markbaker/matrix (3.0.0): Extracting archive
  - Installing markbaker/complex (3.0.1): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.26.0): Extracting archive
  - Installing maennchen/zipstream-php (2.2.1): Extracting archive
  - Installing ezyang/htmlpurifier (v4.16.0): Extracting archive
  - Installing phpoffice/phpspreadsheet (1.25.2): Extracting archive
  0/11 [>---------------------------]   0%
  9/11 [======================>-----]  81%
 10/11 [=========================>--]  90%
 11/11 [============================] 100%
Generating autoload files
3 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found




■「setCellValue、getStyle」のセル指定に配列を使用

セルに座標を設定する場合、従来は "A2" の様に列のアルファベットと行Noで指定していましたが、 ここに [1, 2] の様に [列No, 行No] の指定が出来る様になりました。

なお、スタイルオブジェクトを取得する getStyle の場合は [左上列No, 左上行No, 右下列No, 右下行No] の範囲指定で行います。
以下に簡単な例を示します。 [A2] および [A3] セルに現在時刻を設定し、そのセルの書式スタイルを日付表示の設定で行っています。

<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

// Spreadsheetオブジェクト生成
$objSpreadsheet = new Spreadsheet();
// ワークシートオブジェクト
$objSheet = $objSpreadsheet->getActiveSheet();

// セルにシステム時刻(Unix Time)を設定
$objSheet->setCellValue('A2', Date::PHPToExcel(time()));
$objSheet->setCellValue([1, 3], Date::PHPToExcel(time()));
// スタイルオブジェクト取得([A2]セル)
$objStyle = $objSheet->getStyle('A2')->getNumberFormat()->setFormatCode('yyyy"年"m"月"d"日";@');
$objStyle = $objSheet->getStyle([1, 3, 1, 3])->getNumberFormat()->setFormatCode('yyyy"年"m"月"d"日";@');

// [test6-a2.xlsx]:Excel2007形式で保存する
$objWriter = new Xlsx($objSpreadsheet);
$objWriter->save('test6-a2.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。[A]列の幅は便宜上広くして表示しました。














PR

コメント

コメントを書く