PHPExcel getCalculatedValue()导致#REF

Fir*_*ast 2 phpexcel

我在我的PHPExcel中使用getCalculatedValue()来读取34个Excel文件.不幸的是,有些用户将i:\ drive\test [month.xls] $ C $ 1放入单元格,导致PHPExcel无法读取和存储#REF!在mysql中.

我知道getCalculatedValue()会在单元格中读取公式,但链接怎么样?此外,Excel文件中找到的链接是外部链接,我无法访问.

虽然单元格包含指向另一个工作表的链接,但在单元格本身上显示了一些值.最好的解决方案是复制所有和粘贴值.但是,为此目的打开34个Excel文件似乎不切实际.

我很感激有人可以赐教.

谢谢.

Mar*_*ker 5

如果遇到对外部工作簿的引用,PHPExcel的最新SVN代码将抛出异常.您可以将getCalculatedValue()调用包装在try/catch块中,如果抛出此异常,请使用getOldCalculatedValue()从MS Excel本身上次计算此单元格的值时检索结果.

#REF!响应可能是公式中完全有效的响应,因此仅仅为了捕获它是不够的,这就是在这种特殊情况下抛出异常的原因.

请注意,这不能保证 - 可以在Excel中禁用自动计算,或者因为您正在读取的工作簿已保存而已修改引用的外部工作簿 - 在这两种情况下,getOldCalculatedValue()可能会返回错误的结果,并且你无法知道是否是这种情况......但它通常非常准确.SVN代码的修改正是出于这个原因,当我和12月份一起工作的客户有相同的情况时; 并且代码将包含在PHPExcel的1.7.7生产版本中,该版本应在本周末提供.

编辑

try {
    $calculatedValue = $objPHPExcel->getActiveSheet()->getCell('A1')->getCalculatedValue();
} catch (Exception $e) {
    $calculatedValue = $objPHPExcel->getActiveSheet()->getCell('A1')->getOldCalculatedValue();
}
Run Code Online (Sandbox Code Playgroud)