使用PHPExcel lib读取xls文件并获取单元格类型

时间:2013-11-12 12:16:36

标签: php phpexcel

我使用PHPExcel读取XLS文件。有单元格日期列。该数据列有两种类型的单元格(日期和文本类型单元格)。

我需要获取XLS文件中单元格的视图值。因此,在获取单元格的值之前,我想确定该单元格是Date单元格还是Text单元格。

如何获取XLS文件单元格的视图值。是否有像getCellType(),getViewValueOfCell()或任何其他获取单元格视图值的方法?

注意:$cell->getType不是PHPExcel中的真正方法。这种伪方法。

请为波纹管细胞读数建议最佳逻辑/方法。

 // read view value form date column
 if($cell->getType == 'Date'){
  $array_data[$rowIndex][$cell->getColumn()] = PHPExcel_Style_NumberFormat::toFormattedString($cell->getCalculatedValue(), 'YYYY-MM-DD'); 
 }
 else if($cell->getType == 'Text'){
  $array_data[$rowIndex][$cell->getColumn()] = $cell->getCalculatedValue();
 }

这是我的所有XLS读取功能

       $objReader = new PHPExcel_Reader_Excel5();
   $objReader->setReadDataOnly(true);
   $objPHPExcel = $objReader->load($file_path);
   $rowIterator = $objPHPExcel->getActiveSheet()->getRowIterator();

   $array_data = array();
   foreach ($rowIterator as $row) {
      $cellIterator = $row->getCellIterator();
      $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set
      // if(1 == $row->getRowIndex ()) continue;//skip first row
      $rowIndex = $row->getRowIndex();
      $array_data[$rowIndex] = array('A' => '', 'B' => '', 'C' => '', 'D' => '');

      foreach ($cellIterator as $cell) {
         if ('A' == $cell->getColumn()) {
            $array_data[$rowIndex][$cell->getColumn()] = $cell->getCalculatedValue();
         } else if ('B' == $cell->getColumn()) {
            $array_data[$rowIndex][$cell->getColumn()] = $cell->getCalculatedValue();
         } else if ('C' == $cell->getColumn()) {
            // read view value form date column
             if($cell->getType == 'Date'){
              $array_data[$rowIndex][$cell->getColumn()] = PHPExcel_Style_NumberFormat::toFormattedString($cell->getCalculatedValue(), 'YYYY-MM-DD'); 
             }
             else if($cell->getType == 'Text'){
              $array_data[$rowIndex][$cell->getColumn()] = $cell->getCalculatedValue();
             }
         } else if ('D' == $cell->getColumn()) {
            $array_data[$rowIndex][$cell->getColumn()] = $cell->getCalculatedValue();
         }
      }
   }

1 个答案:

答案 0 :(得分:1)

单元格的getDataType()将返回单元格中包含的值的数据类型

有效的数据类型在PHPExcel_Cell_DataType中定义:

const TYPE_STRING2  = 'str';
const TYPE_STRING   = 's';
const TYPE_FORMULA  = 'f';
const TYPE_NUMERIC  = 'n';
const TYPE_BOOL     = 'b';
const TYPE_NULL     = 'null';
const TYPE_INLINE   = 'inlineStr';
const TYPE_ERROR    = 'e';

请注意,日期或时间没有数据类型:日期/时间是MS Excel中float的数据类型。

要确定单元格是否包含日期/时间值,您需要检查数字格式掩码。为简化此操作,PHPExcel_Shared_Date类中提供了以下方法,以将数字格式掩码标识为与日期/时间相关的掩码

isDateTime()

/**
 * Is a given cell a date/time?
 *
 * @param    PHPExcel_Cell  $pCell
 * @return   boolean
 */

isDateTimeFormat()

/**
 * Is a given number format a date/time?
 *
 * @param    PHPExcel_Style_NumberFormat    $pFormat
 * @return   boolean
 */

isDateTimeFormatCode()

/**
 * Is a given number format code a date/time?
 *
 * @param    string $pFormatCode
 * @return   boolean
 */

API文档应该已经为您确定了这些