现在我正在阅读一个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();
应该告诉你公式,所以也许你可以考虑把它添加到你的问题中,因为知道你是否需要帮助非常有用