gpt4 book ai didi

PHPExcel 解析带有 "numbers stored as text"警告的 .XLS 文件返回#VALUE

转载 作者:搜寻专家 更新时间:2023-10-31 21:13:51 24 4
gpt4 key购买 nike

我的代码使用 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!;
getCalculatedValue() also returns 0,43; #VALUE!; #VALUE!;
getValue() returns 0,43; D7*1.2; E7*11.2;

如果我按照它的建议在 excel 中将其修复为编号。然后 getFormattedValue() 工作正常。但是我不能告诉客户你的xls是错误的...

所以问题是,是否可以让 PHPExcel 像 Excel 一样运行?或者可能是其他一些方法来完成这项工作。

感谢您的帮助和时间!

--- 编辑 1 ---

基本上这是对Mark Ba​​ker回答的评论。

我想找到一个不包含对 .xls 文件的任何更改的解决方案。我不知道它会是什么结构,问题细胞在哪里等等。

有没有办法让 PHPExcel 识别这些单元格?也许 MS Excel 是怎么做到的?或者了解我们的方法。

我考虑尝试将单元格值除以自身,如果我们得到 1,那么这是一个数字单元格。 AND\OR 查找包含在数学计算中的单元格。为了更好地理解我的意思 - 单元格 E7 包含 D7*1,2。所以,我们可以检查 - D7 是数字吗?诸如此类。

目前我对这个问题没有任何解决方案......所以任何帮助都会很棒。

最佳答案

在从 E 列和 F 列的单元格中获取值之前,您需要将 D 列中的字符串值转换为有效数字(使用小数点而不是逗号)。如果有问题的单元格始终位于同一列中(或者至少是可预测的)您可以在加载工作簿时使用单元格 Binder 来处理此转换。

编辑

您需要创建一个像这样的 Binder :

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);
}
}

关于PHPExcel 解析带有 "numbers stored as text"警告的 .XLS 文件返回#VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com