在PHPExcel中通过列和行获取单元格字符串

3
我希望将可能有尾随零的单元格作为字符串读取,而不是数字(这会剥离前导零)。该单元格由整数列/行读取,而不是像此答案中所述的列字符串。
初始代码
    $instReader = $reader->load($this->file);
    $sheet = $instReader->getSheet(0);

我尝试修改这个代码:

$keyCell = $sheet->getCellByColumnAndRow(1,5);

to:

$sheet->setCellValueExplicitByColumnAndRow(1,5, PHPExcel_Cell_DataType::TYPE_STRING);
$keyCell = $sheet->getCellByColumnAndRow(1,5);

前者将 $keyCell 解释为 1407,而不是 01407。

后者返回 "s" 或 ""。

在调用 getCellByColumnAndRow 并且只使用整数列和行值之前,如何将单元格视为字符串。

(顺便说一句,如果可以对整个列执行一次操作,而不是每个单独的单元格都需要这样做,那就更好了)

2个回答

11
$keyCell = $sheet->getCellByColumnAndRow(1,5)->getValue();

将以Excel实际存储的格式读取单元格数据,您不能随意更改或告诉PHPExcel将其读取为不同的数据类型。

但是,如果单元格应用了格式,则可以使用

$keyCell = $sheet->getCellByColumnAndRow(1,5)->getFormattedValue();

相反,这将返回数据字符串,其中包含在Excel电子表格中定义的任何格式掩码。


谢谢马克。但是不起作用。它仍然返回1407,而不是在Microsoft Excel中显示的01407。 - user813801
1
你在加载文件时是否设置了readDataOnly?如果是,则样式信息(如格式掩码)不会被加载,只有原始数据。 - Mark Baker
找到问题了。 $xlsReader->setReadDataOnly(true); 会移除格式。 - user813801
如果您在使用PHPExcel时遇到内存限制问题,可以尝试使用文档中描述的“单元格缓存”功能。 - Mark Baker
如果你需要寻找替代方案,那么我在这里维护了一个列表(链接:https://dev59.com/dm865IYBdhLWcg3wNLw7#3931142),但它们都有各自的限制和问题。 - Mark Baker
显示剩余15条评论

0

我也遇到了同样的问题,让我感到很疯狂。 尝试设置

 $objReader->setReadDataOnly(true);

无法工作

尝试过

 $sheet->getCellByColumnAndRow(4,$row)->getValue()

因为通常将文本显示为原始格式 => 不起作用。

所以最后我在库中更改了代码。编辑名为DefaultValueBinder.php的文件 搜索dataTypeForValue函数并设置如下:

    } elseif (is_float($pValue) || is_int($pValue)) {
        return PHPExcel_Cell_DataType::TYPE_STRING;//TYPE_NUMERIC patch here;

    } elseif (preg_match('/^\-?([0-9]+\\.?[0-9]*|[0-9]*\\.?[0-9]+)$/', $pValue)) {
        return PHPExcel_Cell_DataType::TYPE_STRING;//TYPE_NUMERIC patch here;

现在返回带有0的数字


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