Excelで作成したデータをPhpSpreadsheetを使って読み取りたいと思っておりますが、和暦で入力した部分が正しく取得できないため困っております。
該当のソースコード
test.xlsxのExcelデータには、セルA1に内部データは"2019/5/1"という値が、表示用のデータにはユーザー定義の書式([$-ja-JP]ggge"年"m"月"d"日")で"令和1年5月1日"という値が入っています。
PHP
1#!/usr/bin/php7.0 2<?php 3 require_once "vendor/autoload.php"; 4 5 $reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx(); 6 $sheets = $reader -> load("test.xlsx"); 7 8 $sheet = $sheets -> getSheetByName("Sheet1"); 9 10 $data1 = $sheet -> getCell("A1") -> getValue(); 11 $data2 = $sheet -> getCell("A1") -> getFormattedValue(); 12 13 echo "$data1\n$data2\n"; 14
これを実行すると、以下のような結果となります。
43586
1212122019年5月1日
無理に取得するならgetFormattedValue()
で取得した結果が正規表現で\d+年\d{,2}月\d{,2}日
と一致する場合、getValue()
でOLEオートメーション日付を処理するようにすればよいのかもしれません。ただ、「PHP OLEオートメーション日付」でGoogle先生に聞いても結果は得られず。。。orz
よろしくお願いします。
各アプリケーションのバージョン
Excel
2016
PHP
PHP 7.0.33-0+deb9u3 (cli) (built: Mar 8 2019 10:01:24) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.33-0+deb9u3, Copyright (c) 1999-2017, by Zend Technologies
PhpSpreadsheet
{
"require": {
"phpoffice/phpspreadsheet": "^1.8"
}
}
追記[2019/7/15]
時間も取得できないことが分かりました。PhpSpreadsheetのバグなのか、そもそも和暦などに対応していないのか分かりません。
ExcelデータのセルA1に内部データは"6:30:00"という値で、表示用のデータにはユーザー定義の書式(h"時"mm"分")で"6時30分"という値が入っているものを取り出そうとすると、
0.27083333333333
6時01分
となり、6:30とは異なる結果になります。
回答1件
あなたの回答
tips
プレビュー