致命错误:未捕获PHPExcel_Calculation_Exception

时间:2016-08-05 08:24:27

标签: php excel

我正在尝试用PHP读取xml文件,但我遇到了一些问题。

首先,如果我的单元格是:2016年11月20日,我在PHP中使用getFormattedValue()得到它,但结果是:42370。为什么?

另一个更重要的是我希望结果在一个公式的单元格中:例如我在一个单元格中:128,但公式是:

=SI(O(INDICE(Precios;COINCIDIR(C$1;Tipos;0);COINCIDIR($A326;Días;0))="";INDICE(Precios;COINCIDIR(C$1;Tipos;0);COINCIDIR($A326;Días;0))=Caracter_Cierre);"";MAX(INDICE(Precios;COINCIDIR(C$1;Tipos;0);COINCIDIR($A326;Días;0));INDICE(Precios_Minimos;COINCIDIR(C$1;Tipos_Precios_Minimos;0);3)))

所以,我得到了getCalculatedValue(),但后来我得到了一个错误:

  

致命错误:未捕获的PHPExcel_Calculation_Exception:Tesipro!C2 - >公式错误:

我不知道该怎么办。

1 个答案:

答案 0 :(得分:0)

  

首先,如果我的单元格是:2016年11月20日,我在php中使用getFormattedValue()得到它,但结果是:42370。为什么?

42370是MS Excel序列化时间戳。在内部,MS Excel将日期/时间维护为数字时间戳;一个浮动值,包含自1900年1月1日(或1904年1月1日,如果是Mac版的Excel)以来的天数,时间作为当天的小数部分。然后,它使用数字格式掩码以人类可读的形式将该值显示为日期。

通常,getValue()将返回原始单元格值,在这种情况下为序列化时间戳;并且getFormattedValue()将应用数字格式掩码,也将该值转换为格式化为显示的字符串,因为它出现在MS Excel GUI中。 如果您正在使用getFormattedValue()但仍然看到42370值,则很可能您已将readDataOnly设置为true的文件加载,这告诉PHPExcel不要加载数字格式掩码,因此它不能应用格式掩码将该序列化时间戳值转换为可显示的日期格式。

对于公式问题,我无法在不访问文件本身的情况下找出原因,在尝试计算值时分析计算引擎的执行细节;但有一个gist here显示如何在调试模式下运行计算。这样的信息可以更容易地尝试和诊断问题。