PhpSpreadSheetでExcelファイルのセルから数式の計算結果を取得する

テクノロジー

PhpSpreadSheetを使ってExcelファイルの出力機能があるアプリを作成している際に、エクスポートされるファイル名の一部にExcelファイル内のセルの値を入れる必要が出てきた。

たとえば、「ファイル名_[セルK13の値].xlsx」みたいな感じだ。

PhpSpreadSheetの機能を使って、普通にセルの値を変数に代入してファイル名に反映させようとしたら少しつまづいたので、備忘録として本記事に残しておく。

getValue()

通常こういう時にはgetValue()を使用する。例えば「file.xlsx」というExcelファイルのK13から値を取得したい場合は以下のようにすることでセルの値を変数に代入できる。

//ライブラリの読み込み
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); //Xlsx形式のリーダーを作る
$spreadsheet = $reader->load('file.xlsx'); //file.xlsxというファイルを読み込む
$sheet = $spreadsheet->getSheet(0); //file.xlsxの最初のシートを指定
$value = $sheet->getCell('K13')->getValue(); //K13セルの値を代入

しかしgetValue()を使用すると、K13が「=J13 * 1.1」のような数式のセルだった場合、数式が丸々取得されてしまう。

つまり「ファイル名_J13 * 1.1.xlsx」というヘンテコファイル名になってしまうのだ。

getCalculatedValue()

数式のセルから数式の結果の値を取得するには、getCalculatedValue()を使用するといいらしい。

$value = $sheet->getCell('K13')->getValue(); //=J13 * 1.1
$value = $sheet->getCell('K13')->getCalculatedValue(); //1100

これで「ファイル名_1100.xlsx」になる。PHPSpreadSheetって便利だなー。

タイトルとURLをコピーしました