PHPExcel读取Excel文件时,十进制数字被错误读取。

4

我在一个.xlsx文件的单元格中得到了值为“9,2”(荷兰表示法为“9.2”),该单元格具有“常规”数字格式。同时,在您查看公式的上方条中显示的值也为“9,2”。当我使用PHPExcel的-> getValue()读取此单元格时,我得到了“9.199999999999999”的值。

这是我的代码:

$oPhpReader = PHPExcel_IOFactory::createReader($sFileType);
$aWorksheetNames = $oPhpReader->listWorksheetNames($sFileName);
$oPhpReader->setReadDataOnly(true);
$oPhpReader->setLoadSheetsOnly($aWorksheetNames[0]);
$oPhpExcel = $oPhpReader->load($sFileName);
$oWorksheet = $oPhpExcel->getActiveSheet();
$oCell = $oWorksheet->getCellByColumnAndRow($iCol,$iRow);
$sTempValue = $oCell->getValue();

欢迎来到计算机舍入误差的世界...使用number_format()或sprintf()将其显示为1个小数位,它就会神奇地自我纠正。 - Mark Baker
1
也许如果你尝试使用getFormattedValue()(它返回反映格式掩码的数字),而不是getValue()(它返回“原始”数据值)就可以了。 - Mark Baker
但是为什么每次我打开我的Excel文件时,看到的是相同的数字,但是PHPExcel却对其进行了不同的处理呢?无论如何,我需要在我的PHP应用程序中将正确的值填入Excel表格中。一定有解决办法。或者这是PHPExcel本身的一个错误吗? - DeniseMeander
它被设置为14,应该是多少? - DeniseMeander
2
很明显这不是 PHP 或 PHPExcel 的 bug,但 PHPExcel 应该自带解决方案。 - Dan
显示剩余8条评论
1个回答

1
这是我现在解决问题的方法。虽然我不认为这是一个非常整洁的解决方案,但这可能是唯一的方法。
我想到了一个办法,我永远不会得到超过12位数字的数,只有当PHPExcel弄错时才会出现。所以我使用number_format将所有浮点数四舍五入到12位小数:
if ((is_numeric($sTempValue))&&(strpos($sTempValue,'.')))
{
    $sTempValue = rtrim(rtrim(number_format($sTempValue,12,',',''),'0'),',');
}

但请注意 - 这不是PHPExcel的错误,甚至不是PHP的错误。 - Mark Baker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接