phpexcel中的单元格格式

时间:2010-11-21 17:29:59

标签: php phpexcel

我正在尝试用phpexcel读取一些excel文件,到目前为止工作正常。虽然phpexcel有点太聪明了,但是从我的单元格中移除了前导零。我想我需要告诉它将单元格视为文本字符串,而不是一般或数字。但我失败了。我甚至在stackoverflow上发现了关于此问题的线程,但建议的解决方案根本不起作用。

下面的

是我正在处理的东西的片段。

foreach(@$objWorksheet->getRowIterator() as $row){
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    foreach($cellIterator as $cell){
        #$objWorksheet->getStyle($cell->getCoordinate())->getNumberFormat()->setFormatCode('@');
        $cells[] = $cell->getValue();
    }
}

任何想法?我不想仅限于阅读数字内容,因为我无法控制用户将上传的内容。把所有东西当成字符串都是完美的。

/ peder

3 个答案:

答案 0 :(得分:3)

getValue()方法正是它应该做的事情,没有试图变得聪明。它返回存储在单元格中的实际值。如果该单元格包含整数,则返回一个整数;如果单元格包含浮点数,则返回浮点数;如果它包含一个字符串,则返回一个字符串。聪明的是将该值作为格式化字符串返回(如果合适,使用前导零),然后您需要使用一种相当不同的方法,并将单元格格式应用于返回的值。

foreach($cellIterator as $cell){ 
   $cells[] = PHPExcel_Style_NumberFormat::toFormattedString( $cell->getValue(),
              $objPHPExcel->getCellXfByIndex( $cell->getXfIndex() )->getNumberFormat()->getFormatCode()
   );
}

或者如果单元格包含公式:

foreach($cellIterator as $cell){ 
   $cells[] = PHPExcel_Style_NumberFormat::toFormattedString( $cell->getCalculatedValue(),
              $objPHPExcel->getCellXfByIndex( $cell->getXfIndex() )->getNumberFormat()->getFormatCode()
   );
}

请不要使用@来尝试抑制错误。 PHPExcel抛出异常,你真的应该想要捕获它们。

但是,对于您正在做的事情,您可能会考虑工作表的toArray()方法,该方法将返回工作表中所有单元格值的数组。

答案 1 :(得分:1)

比迭代者更容易。为了做foreach你也可以使用toArray方法,例如:

$active_sheet = $objPHPExcel -> getActiveSheet();
foreach($active_sheet -> toArray() as $row_n => $row){
 foreach($row as $cell_n => $cell){
  // operations here
 }
}

对我来说工作得很好,而且似乎比Iterators更快,就像Mark Ba​​ker悲伤一样。

在处理CVS时,我看到一个主要问题:用户必须从Excel导出数据,这个过程可能会让大多数人感到困惑。这就是我直接从Excel搜索导入解决方案的原因。

使用那些迭代器对我来说很奇怪,我真的没有深入研究它。在使用迭代器访问数据时,它返回很少(在我的情况下为2到4)序列化对象,从中获取数据是噩梦。

答案 2 :(得分:1)

所提供的解决方案都不适用于我(使用PHPExcel v1.7.5进行CSV导入) 我用这样的设定值粘合剂解决了:

PHPExcel_Cell::setValueBinder(new PHPExcel_Cell_StringValueBinder());

之前PHPExcel_IOFactory::createReader('CSV')

相关问题