PHPExcel计算公式单元格和格式货币


PHPExcel calculate formula cell and format currency

现在我正在阅读一个excel文件并将其显示在html表上。
像这样:

 <?php 
 function load_table(){
    require_once('Classes/PHPExcel.php');
    $objReader = PHPExcel_IOFactory::createReader('Excel2007');
    $objReader->setReadDataOnly(true);
    $objPHPExcel = $objReader->load("SampleData.xlsx");
    $objWorksheet = $objPHPExcel->getActiveSheet();
    $highestRow = $objWorksheet->getHighestRow(); // e.g. 10
    $highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F'
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // e.g. 5
    echo '<table>' . "'n";
    for ($row = 1; $row <= $highestRow; ++$row) {
      echo '<tr>' . "'n";
      for ($col = 0; $col <= $highestColumnIndex; ++$col) {
        echo '<td>';
        echo  $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();     
        echo '</td>' . "'n";
      }
      echo '</tr>' . "'n";
    }
    echo '</table>' . "'n";
}
  ?> 

有时单元格内容是公式。我想计算它和echo的结果(就像excel一样)。我尝试了下面的代码,但我得到了以下错误:
Warning: Illegal string offset 'value' in...

echo  $objWorksheet->getCellByColumnAndRow($col, $row)->getCalculatedValue();  

我也试过这样做:

echo  $objWorksheet->getCellByColumnAndRow($col, $row)->getOldCalculatedValue();  

这一个工作,但我不想使用GetOldCalculatedValue,因为:

getOldCalculatedValues()读取值,因为它是由MS Excel(如果可用)最后计算,虽然你不能保证它将始终存在,或者是正确的,如果它是(你可以禁用MS Excel中的自动计算,或者它不会被设置,如果加载CSV文件);而getCalculatedValue()实际上是重新计算PHPExcel本身的值。

我还使用echo来打印公式字符串,它似乎很好:

echo $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();  

公式印刷:
=F2*E2 =F3*E3 =F4*E4 =F14*E14 ...

那么我怎样才能得到公式的结果并将其格式化为货币呢?

关于单元格格式:

如果您使用

,单元格将没有任何格式。
$objReader->setReadDataOnly(true);

因为你特别告诉PHPExcel 而不是加载单元格式。如果要读取格式,请不要将readDataOnly设置为true

关于你问题的另一部分,如果你在调用

时出现错误
echo  $objWorksheet->getCellByColumnAndRow($col, $row)->getCalculatedValue();

那么说明公式是什么可能会有用

echo  $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();

应该告诉你公式,所以也许你可以考虑把它添加到你的问题中,因为知道你是否需要帮助非常有用