Изменить входное значение, но не изменить результат в PhpExcel - PullRequest
3 голосов
/ 07 марта 2012

У меня проблема с 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 ]

2 голосов
/ 07 марта 2012

Вы можете изменить результат, но по соображениям производительности механизм вычислений кэширует результат вычисления формулы после его расчета.Если вы хотите изменить базовые данные, вы должны очистить этот кэш, прежде чем запрашивать вычисленное значение снова:

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

или

PHPExcel_Calculation::flushInstance();

Вы также можете изменить это поведение по умолчанию - такчто результаты не кэшируются вообще - перед отправкой любых других запросов к механизму вычислений:

PHPExcel_Calculation::getInstance()->setCalculationCacheEnabled(FALSE);
0 голосов
/ 08 августа 2014

Если вы используете phpExcel, он вам не нужен. Вы можете сделать это только:

установить заголовок один раз.

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

Тогда используйте его

`Функциональный тест ($ 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

...