phpexcel踩坑记

最近在使用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");

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