最近在使用phpexcel扩展处理表格导入的时候,遇到两个坑,现做以下记录

  • 坑一:excel表中的富文本导入后数据始终不对

    解决方法:假设$temp为循环读取的每列数据值,判断是否是PHPExcel_RichText类的实例,如果是,则调用$temp自身的方法__toString()转换,代码如下:

    if ($temp instanceof PHPExcel_RichText) $temp = $temp->__toString();
    
  • 坑二:excel表中的日期导入后变成了float类型的值

    解决方法1:假设$temp为循环读取的每列数据值,假设日期所在列为D
    代码如下(这里的if仅仅是用来判断日期是否为空,如果不判断,为空时会自动用当前时间填充,根据实际业务决定):

    if($k=='D'){//指定D列为时间所在列
      $date = $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
      if($date){
          $temp = date("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($date));
      }else{
          $temp = '';
      }
    }else{
      $temp = $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
    }
    

解决方法2:也可以在业务代码里直接转换时间值

$shared = new \PHPExcel_Shared_Date();
$date = date('Y-m-d',$shared->ExcelToPHP($v1));//日期/时间
  • 坑三:phpexcel 单元格内换行的问题
$phpexcel->getActiveSheet()->getStyle('B')->getAlignment()->setWrapText(True);
$phpexcel->getActiveSheet()->setCellValue("B".$i, "hi my name is\n darkmuzi");

在单元格赋值之前先设置样式