我正在读取带有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(假)
但是,如果我不是文件保存 setPreCalculateFormulas(假)(这似乎是正确的方式重新计算)并再次读取文件,getCalculatedValue()返回不正确的结果,getOldCalculatedValue()返回0,这是错误的。
为什么在保存后清除缓存的值?是否有其他一些设置需要与setPreCalculateFormulas(false)一起使用?
感谢您的反馈马克,我添加了一些更多的细节。任何想法为什么getOldCalculatedValue()返回0? – BOENDAGGER 2014-08-28 09:06:53
当您保存文件时,PHPExcel不会保存getOldCalculatedValue()值,所以如果您已经使用PHPExcel保存了一个文件然后重新加载它,那么该值不再存在,您只需获得默认值0 – 2014-08-28 09:22:03