可以使用getValue(),getCalculatedValue()和getOldCalculatedValue()来检索phpexcel中单元格的值。
有没有办法以编程方式确定单元格的内容类型并应用相应的正确方法。我需要以一般的方式使用它。即显示与打开excel时相同的值。
我知道有一些名为getDataType()的东西,但在这种情况下不确定如何应用它(不在文档中)。根据我的经验,有时这三个中只有一个检索到正确的值。
(即有时getOldCalculatedValue可用但不是getCalculatedValue代表公式。其他时候只有getvalue有效等等。)
答案 0 :(得分:1)
getOldCalculatedValue()
用于检索MS Excel本身中先前计算的结果;并且不应该依赖,因为可以在MS Excel中禁用自动计算,这可能会使此字段为空,或者甚至使用不正确的值。它在PHPExcel中用作"后备"对于依赖于外部电子表格数据的单元格公式,但它仍然不应被视为绝对数据公式。
getValue()
返回" raw"细胞的价值。返回的值可能需要"解释"。包含日期和/或时间的单元格在MS Excel中只是一个浮点值,因此它将返回该浮点数(例如42017.7916666667
而不是人类可读的日期/时间,如13-Jan-2015 19:00
;
如果单元格包含公式(例如=TODAY()
),它将返回实际公式;或0.8
表示可能格式化为百分比且在MS Excel中显示为80%
的值。
getCalculatedValue()
将尝试执行公式计算,并返回该计算的结果。如果单元格不包含公式,那么它将返回" raw"值,与getValue()
相同。虽然PHPExcel有一个相当不错的计算引擎,但它并不完美(例如它不能处理3d单元格范围或数组公式),因此某些公式可能会失败。同样,包含对外部资源的引用的公式也可能会失败,虽然PHPExcel将尝试在这种情况下使用getOldCalculatedValue()
,但它不会(如上所述)保证保持正确的结果。
getFormattedValue()
将执行getCalculatedValue()
,然后对结果应用适用于该单元格的任何数字格式设置掩码,以便(例如)带有日期掩码的浮点数将显示为日期。
但是,如果您已经加载了带有readDataOnly(true)的电子表格文件,那么它会告诉PHPExcel 不 加载任何格式,包括数字格式掩码,因此它将无法格式化结果。
当您访问MS Excel本身时,与MS Excel本身显示的值最接近的结果将是getFormattedValue()