setReadDataOnly (true)를 사용하여 XLS 파일을 읽었습니다. 읽은 개체는 새 Excel 파일로 다시 저장됩니다. 불행히도 일부 셀 값은 잘못 계산됩니다 (이 값은 부분합 수식이있는 셀보다 계산 버그와 관련이 있습니다). 올바르게 이해하면 XLS 파일의 각 셀에 수식과 함께 미리 계산 된 값이 포함됩니다. 파일을 읽을 때 수식을 계산하지 않으려 고 PHPExcel을 얻을 수 있다면 (대신에 미리 계산 된 값을 사용하는 것만으로)이 문제를 해결할 수 있습니다. setReadDataOnly (true) 또는 setPreCalculateFormulas (false)가이 작업을 수행 할 수 있다고 생각했지만 그렇지 않습니다. 마크의 설명에PHPExcel을 사용하여 Excel 파일을 읽을 때 계산 된 값 무시
추가 정보를 원하시면
덕분에, 나는 내 경우 getCalculatedValue()와 getOldCalculatedValue()의 차이를 조사 하였다.)
$excel_reader = PHPExcel_IOFactory::createReaderForFile($file);
$excel_reader->setReadDataOnly(true);
$excel_obj_temp = $excel_reader->load($file);
// Test one of the values in question
$excel_obj_temp->setActiveSheetIndexByName("Form 11");
error_log("val:".$excel_obj_temp->getActiveSheet()->getCell("E36")->getCalculatedValue());
error_log("old_val:".$excel_obj_temp->getActiveSheet()->getCell("E36")->getOldCalculatedValue());
$new_file = "new_generated_name";
$excel_writer = new PHPExcel_Writer_Excel5($excel_obj_temp);
$excel_writer->setPreCalculateFormulas(false);
$excel_writer->save($unprotected_file);
에서 파일 읽기, 그것은 getOldCalculatedValue에 올바른 값을 보여줍니다 (: 나는에서 파일을 읽은 다음 다시 쓰는하려면 다음 코드를 사용합니다. 그런 다음 파일 을 setPreCalculateFormulas (false)없이 저장하고 파일을 다시 읽으면 getCalculatedValue()와 getOldCalculatedValue()가 모두 동일한 (잘못된) 결과를 반환합니다. 이 값이 나는 대신 setPreCalculateFormulas로 (false)를 파일 을 저장하면 올바른 방법이 보인다 (
그러나 (false)를 setPreCalculateFormulas를 설정하지 않으면 저장에 다시 계산됩니다 마크의 설명과 함께 인라인) 파일을 다시 읽으면 getCalculatedValue()가 잘못된 결과를 반환하고 getOldCalculatedValue()가 0을 반환합니다.
저장 한 후 캐시 된 값이 지워지는 이유는 무엇입니까? setPreCalculateFormulas (false)와 함께 적용해야하는 다른 설정이 있습니까?
피드백 표 주셔서 감사합니다. 몇 가지 세부 정보를 추가했습니다. getOldCalculatedValue()가 0을 반환하는 이유는 무엇입니까? – BOENDAGGER
PHPExcel은 파일을 저장할 때 getOldCalculatedValue() 값을 저장하지 않으므로 PHPExcel로 파일을 저장 한 다음 다시로드하면 해당 값이 더 이상 존재하지 않고 단순히 기본값 0을 얻습니다 –