PHPExcelで再計算するとき

投稿者: | 2017年4月30日

phpでエクセルを扱う、PHPExcelが便利なので最近使っているのですが、一度計算したセルで値を変更して再計算しても一回目の計算結果が出てしまって困りました。
↓のような感じです。A3はA1+A2です。

$sheet->setCellValue('A1', 1);
$sheet->setCellValue('A2', 2);
echo $sheet->getCell('A3')->getCalculatedValue();
// 3が出力される

$sheet->setCellValue('A1', 2);
$sheet->setCellValue('A2', 3);
echo $sheet->getCell('A3')->getCalculatedValue();
// 5が出力されるはずが3が出力される

 どうも調べたところ、PHPExcelは計算結果をキャッシュしているとのこと。
キャッシュをクリアするには、次の命令を使うようです。$bookはエクセルファイルを読み込んだオブジェクトです。

PHPExcel_Calculation::getInstance($book)->clearCalculationCache();

 よって、最初のプログラムは次のようになります。

$sheet->setCellValue('A1', 1);
$sheet->setCellValue('A2', 2);
echo $sheet->getCell('A3')->getCalculatedValue();
// 3が出力される

PHPExcel_Calculation::getInstance($book)->clearCalculationCache();

$sheet->setCellValue('A1', 2);
$sheet->setCellValue('A2', 3);
echo $sheet->getCell('A3')->getCalculatedValue();
// 5が出力される