我正在尝试读取一个单元格,其中可能有尾随零作为字符串而不是数字(剥离前导零)。单元格由整数列/行读取,如下所示,而不是列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并仅使用列和行的整数值之前,如何将单元格视为字符串。
(顺便说一句,如果这可以针对整个列进行一次,而不是每次针对每个单独的单元格做得更好)
答案 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