PHPExcel parsing.XLS文件,带有;“存储为文本的数字”;警告返回#值
我的代码使用getFormattedValue()方法将数据拉入PHP 下面是.xls的问题部分,在D列有“存储为文本的数字”:PHPExcel parsing.XLS文件,带有;“存储为文本的数字”;警告返回#值,php,numbers,phpexcel,xls,Php,Numbers,Phpexcel,Xls,我的代码使用getFormattedValue()方法将数据拉入PHP 下面是.xls的问题部分,在D列有“存储为文本的数字”: Excel cells contains next values: D7 -> 0,43; E7 -> =D7*1,2; F7 -> =E7*11,2; getFormattedValue() returns: 0,43; #VALUE!; #VALUE!; getCalculatedValu
Excel cells contains next values: D7 -> 0,43; E7 -> =D7*1,2; F7 -> =E7*11,2;
getFormattedValue() returns: 0,43; #VALUE!; #VALUE!;
getCalculatedValue() also returns 0,43; #VALUE!; #VALUE!;
getValue() returns 0,43; D7*1.2; E7*11.2;
如果我像它建议的那样在excel中修复它,则为数字。然后getFormattedValue()就可以正常工作了。
但我不能告诉客户你的xls是错的
所以问题是,有可能让PHPExcel像Excel一样工作吗?或者其他一些方法来实现这一点
谢谢你的帮助和时间
---编辑1---
基本上,这是对马克·贝克的回答的评论
我想找到一个不包括对.xls文件的任何更改的解决方案。我不知道它是什么结构,问题细胞在哪里,等等
有没有办法让PHPExcel识别这些细胞?也许Excel女士是怎么做到的?或者找出我们的方法
我想尝试将单元格值除以它自己,如果我们得到1,那就是一个数值单元格。和\或查找包含在数学计算中的单元格。为了更好地理解我的意思-单元格E7包含D7*1,2。所以,我们可以检查-D7是数字吗?差不多吧
现在我还没有解决这个问题的办法。。。因此,任何帮助都将非常有用。在从E列和F列中的单元格获取值之前,您需要将D列中的字符串值转换为有效数字(使用小数点而不是逗号)。如果问题单元格始终位于同一列中(或至少可预测)加载工作簿时,可以使用单元格活页夹处理此转换 编辑 您需要创建一个活页夹,如下所示:
class PHPExcel_Cell_AdvancedValueBinder
extends PHPExcel_Cell_DefaultValueBinder
implements PHPExcel_Cell_IValueBinder
{
public function bindValue(PHPExcel_Cell $cell, $value = null)
{
// sanitize UTF-8 strings
if (is_string($value)) {
$value = PHPExcel_Shared_String::SanitizeUTF8($value);
}
// Find out data type
$dataType = parent::dataTypeForValue($value);
if ($dataType === PHPExcel_Cell_DataType::TYPE_STRING &&
!$value instanceof PHPExcel_RichText) {
if (preg_match('/^\d+,\d+$/', $value)) {
list($w, $d) = explode(',', $value);
$value = (float) $w . '.' . $d;
$cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
return true;
}
}
// Not bound yet? Use parent...
return parent::bindValue($cell, $value);
}
}
逗号小数分隔符不是问题。我试过了。我不介意用细胞粘合剂,但用什么细胞?(请阅读编辑1)。另外,马克,你们能指出一些类或文件吗,计算引擎可以识别单元格?我对php不是很在行,到目前为止我还没有发现这一点。非常感谢你的回答