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が出力される