更改输入值但不更改PhpExcel中的结果

时间:2012-03-07 14:35:51

标签: phpexcel

我的PHPExcel问题如下所示

function Test($a, $b) {

    //  Create a new PHPExcel object with a single sheet
    $objPHPExcel = new PHPExcel();
    $activeSheet = $objPHPExcel->getActiveSheet();

    $activeSheet->SetCellValue('B2',$a);
    $activeSheet->SetCellValue('B3',$b);
    $activeSheet->SetCellValue('C4',"=B2+B3");
    $C4 = $activeSheet ->getCell('C4')->getCalculatedValue();

    echo "C4:$C4<br/>";
}

最后,我称这个函数为

Test(10, 20);
Test(40, 70);
Test(30, 80);

但是,结果是

C4:30
C4:30
C4:30 

为什么 getCalculatedValue()不会更改结果?看起来这个函数只获得第一个值。

2 个答案:

答案 0 :(得分:2)

您可以更改结果,但出于性能原因,计算引擎会在计算公式计算结果后对其进行缓存。如果要更改基础数据,则必须在再次请求计算值之前刷新该缓存:

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

PHPExcel_Calculation::flushInstance();

您还可以更改此默认行为 - 以便在向计算引擎发出任何其他请求之前不会缓存结果:

PHPExcel_Calculation::getInstance()->setCalculationCacheEnabled(FALSE);

答案 1 :(得分:0)

如果您使用phpExcel,则不需要它。你只能这样做:

设置标题一次。

$objPHPExcel = new PHPExcel(); $activeSheet = $objPHPExcel->getActiveSheet();

然后使用它

`function Test($ a,$ b){

$activeSheet->SetCellValue('B2',$a);
$activeSheet->SetCellValue('B3',$b);
$activeSheet->SetCellValue('C4',"=B2+B3");

}`

广告设置您的值Test(10, 30);

如果设置了coll并且不更改单元格,则覆盖。如果你需要做一个清单

function Test($a, $b) {
$i++;
    $activeSheet->SetCellValue('B2',$a);
    $activeSheet->SetCellValue('B3',$b);
    $activeSheet->SetCellValue('C'.$i,"=B2+B3");

}

并设置值Test(10, 30);

然后输出40