按列和行在PHPExcel中将Cell作为字符串

时间:2014-12-30 15:52:35

标签: string phpexcel

我正在尝试读取一个单元格,其中可能有尾随零作为字符串而不是数字(剥离前导零)。单元格由整数列/行读取,如下所示,而不是列answer具有的列字符串。

初始代码

    $instReader = $reader->load($this->file);
    $sheet = $instReader->getSheet(0);

我试过修改它:

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

为:

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

前者为$ keyCell而不是01407

提供1407

后者给出了" s"或""

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

(顺便说一句,如果这可以针对整个列进行一次,而不是每次针对每个单独的单元格做得更好)

2 个答案:

答案 0 :(得分:7)

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

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

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

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

相反,这将以字符串形式返回数据,使用Excel电子表格中定义的任何格式掩码

答案 1 :(得分:0)

对我来说是同样的问题。我疯了。 尝试设置

 $objReader->setReadDataOnly(true);

无法正常工作

尝试

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

因为通常将文本显示为raw =>无效。

所以最后我更改了库中的代码。编辑名为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