Chinaunix首页 | 论坛 | 博客
  • 博客访问: 275396
  • 博文数量: 159
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1619
  • 用 户 组: 普通用户
  • 注册时间: 2016-01-10 19:58
文章分类

全部博文(159)

分类: Web开发

2016-07-24 23:20:37

最近公司做一个客户导入会员的功能,以前导入都是使用csv格式导入的,但是客户反应问题挺多的,普遍是乱码(由于各种系统各种环境可能引起编码问题)。最近想着就把这个导入完全改成excel导入,就研究了下phpexcel,发现读取excel还是挺方便的,这样也方便客户了,比较excel 无论用office 还是 wps 打开都是没有问题的

示例读取代码如下

/*
 * $path excel文件路径
 * $header_mapping 文字和数据库字段的对应关系
 * excel第一行 是 字段标准(通常是汉字),
 * example
 * $header_mapping = [ '姓名' => 'uid' ];
 *
 */
private function readExcel( $path,$header_mapping = []){
        $objPHPExcel = PHPExcel_IOFactory::load( $path );
        //选择标签页

        $sheet = $objPHPExcel->getSheet(0);

        //获取行数与列数,注意列数需要转换
        $highestRowNum = $sheet->getHighestRow();
        $highestColumn = $sheet->getHighestColumn();
        $highestColumnNum = PHPExcel_Cell::columnIndexFromString($highestColumn);
        $usefullColumnNum = $highestColumnNum;

        //取得字段,这里测试表格中的第一行为数据的字段,因此先取出用来作后面数组的键名
        $filed = array();
        for($i=0; $i<$highestColumnNum;$i++){
            $cellName = PHPExcel_Cell::stringFromColumnIndex($i).'1';
            $cellVal = $sheet->getCell($cellName)->getValue();//取得列内容
            if( !$cellVal ){
                break;
            }
            $usefullColumnNum = $i;
            $filed []= $cellVal;
        }

        //开始取出数据并存入数组
        $data = [];
        for( $i=2; $i <= $highestRowNum ;$i++ ){//ignore row 1
            $row = array();
            for( $j = 0; $j <= $usefullColumnNum;$j++ ){
                if( !isset($header_mapping[ $filed[$j] ]) ){
                    continue;
                }
                $cellName = PHPExcel_Cell::stringFromColumnIndex($j).$i;
                $cellVal = $sheet->getCell($cellName)->getValue();
                if($cellVal instanceof PHPExcel_RichText){ //富文本转换字符串
                    $cellVal = $cellVal->__toString();
                }

                $fd = $header_mapping[ $filed[$j] ];
                $row[ $fd ] = $cellVal;
            }
            $data []= $row;
        }
        return $data;
}

/*
 * excel日期转化
 * excel中日期读取出来是个数字,需要转化
 **/
private function excelTime( $date ){
    $date = date("Y-m-d",PHPExcel_Shared_Date::ExcelToPHP($date) );
    return  $date;
}

演示界面截图

600

600

600

phpexcel地址

 

注意事项

1:日期格式处理  ,处理如下

//phpexcel 读取日期格式出来是个数字
$date = date("Y-m-d",PHPExcel_Shared_Date::ExcelToPHP($date) );

2:长整形处理

//php读取excel长整形会以科学计数法记录
number_format( $val,0,'','');

原文地址:标签:         

智能推荐

阅读(1012) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~