2013-04-15 3 views
2

내 Excel 파일에 B1=IF(A1>0,"Greater than Zero",IF(A1<0,"Less than Zero","Equal Zero"))이 있습니다. A1 값을 변경 한 후 정보를 getCalculatedValue을 통해 검색하려고했습니다.PHPExcel을 다시 계산하지 않습니다

두 번 반복했는데 두 개의 에코가 "0보다 작음" 왜 두 번째 에코가 "같음"을 반환하지 않는지 이해할 수 없습니다.

/** Change A1 Value **/ 
$objPHPExcel->getActiveSheet()->setCellValue('A1','=-1'); 

/** Calculate and State B1 Value **/ 
echo $objPHPExcel->getActiveSheet()->getCell('B1')->getCalculatedValue(); 

/** Change A1 Value AGAIN **/ 
$objPHPExcel->getActiveSheet()->setCellValue('A1','=0'); 

/** Calculate and State B1 Value **/ 
echo $objPHPExcel->getActiveSheet()->getCell('B1')->getCalculatedValue(); 
+1

체크 아웃이 답변 : http://stackoverflow.com/a/9142966/570812 – Passerby

+0

모두 그렇게 대단히 감사합니다. 그게 내 문제를 해결 했어. – Lin

+0

중복으로 신고해야합니까? (비록 그것이 정확하게 같은 quesiton이라고 생각하지 않지만). 또는 단순히이 quesiton을 삭제해야합니까? – Lin

답변

4

는 PHPExcel은 성능 향상을 위해 기본적으로 수식 계산의 결과를 캐시, 그래서 당신은 getCalculatedValue() 전화를 두 번째 시간, 그것은 재 계산보다는 캐시 된 값을 반환합니다. 기본 데이터를 변경 한 경우 동일한 셀에 대해 업데이트 된 계산 된 값을 검색하려면 getCalculatedValue()을 다시 호출하기 전에 계산 캐시를 지워야합니다.

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

또는 완전히 계산 캐싱을 사용하지 않도록 :

PHPExcel_Calculation::getInstance()->disableCalculationCache(); 
+0

감사합니다. flushInstance가 모든 캐시를 지우는 것입니다. clearCalculationCache가 캐시를 지우고 있습니다. 캐시를 계산하고 있습니까? – Lin

+0

아니, 그들은 단지 동의어 야. –

+0

하하, 고마워. – Lin

관련 문제