phpexcel中的单元格格式

fja*_*rom 7 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?我不想仅限于阅读数字内容,因为我无法控制用户将上传的内容.将一切都视为字符串将是完美的.

/ peder

Mar*_*ker 3

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

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

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

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

并且请不要使用 @ 来尝试抑制错误。PHPExcel 会抛出异常,您确实应该捕获这些异常。

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