首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHPExcel读取Excel文件时忽略计算值

使用PHPExcel读取Excel文件时忽略计算值
EN

Stack Overflow用户
提问于 2014-08-27 17:07:31
回答 1查看 8K关注 0票数 5

我正在使用setReadDataOnly(true)读取XLS文件。读取对象将再次保存为新的Excel文件。不幸的是,有些单元格值计算不正确(这与小计公式上单元格上的计算错误有关)。如果我正确理解,XLS文件中的每个单元格都包含一个预先计算的值以及公式。如果我可以让PHPExcel在读取文件时不尝试计算公式(而只是按原样使用预先计算的值),我就可以解决这个问题。我认为setReadDataOnly(真)或setPreCalculateFormulas(false)可以实现这一点,但它没有做到这一点。

附加信息

由于Mark的解释,在我的例子中,我研究了getCalculatedValue()和getOldCalculatedValue()之间的区别。我使用以下代码读取文件,然后再将其写入:

代码语言:javascript
复制
$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()都会返回相同(不正确)的结果。这与Mark的解释是一致的,即如果不设置setPreCalculateFormulas(false),则在保存时将重新计算这些值。

但是,如果我用 setPreCalculateFormulas(false)保存文件setPreCalculateFormulas(这似乎是正确的方法)并再次读取文件,则getCalculatedValue()返回不正确的结果,getOldCalculatedValue()返回0,这是错误的。

为什么在保存后清除缓存的值?是否还有其他设置需要与setPreCalculateFormulas(假)一起应用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-27 20:46:17

当加载电子表格文件时,PHPExcel不计算而不是计算任何值。它只在显式调用单元格的getCalculatedValue()getFormattedValue()方法时,或者在保存时默认情况下计算单元格值(除非使用写入器的setPreCalculateFormulas(false)).尽管使用autofit列强制对这些列中的任何单元格进行重新计算,但不考虑任何其他设置。

PHPExcel通常会在电子表格中保存所有公式单元格的计算值(除非此值被显式禁用),并且可以使用单元格的PHPExcel()方法在getOldCalculatedValue中读取该值。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25533090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档