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

时间:2015-06-01 19:47:46

标签: php phpexcel

现在我正在读取一个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();  

Fórmula印刷:
=F2*E2 =F3*E3 =F4*E4 =F14*E14 ...

那么我如何得到公式的结果并将其格式化为货币?

1 个答案:

答案 0 :(得分:1)

关于单元格格式:

如果您使用

,则单元格不会有任何格式
$objReader->setReadDataOnly(true);

因为您特意告诉PHPExcel 加载单元格格式。如果要读取格式

,请不要将readDataOnly设置为true

关于问题的其他部分,如果您在致电

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

然后说出公式是什么

可能是有用的
echo  $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();

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