PHP Excel数据导入

excel数据批量导入是在开发中经常用到的一项功能,我把我在开发中的一些经验写出来,希望能对大家有所帮助,有什么不对的地方,大家多多担待

一:准备工作

先下载PHPExcel扩展包
最终,本人去github上下载了1.8版本的扩展包。
下载地址:PHPExcel1.8版本下载(https://github.com/PHPOffice/PHPExcel);

二:详细配置

【第一步】将下载的1.8扩展包解压,将里面全部内容复制到vendor文件夹下,并改名为PHPExcel
【第二步】在Base.php中写一个导入函数,详细信息请看代码注释(无需更改),函数代码如下:
 //excel文件导入
    public function importExcel($file){
        include(__DIR__.'/../../../vendor/PHPExcel/Classes/PHPExcel.php');
        $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
        $cacheSettings = array('memoryCacheSize' => '16MB');
        \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//文件缓存
        //当前空间不用\,非当前空间要加\
        $PHPExcel = new \PHPExcel();//创建一个excel对象
        $PHPReader = new \PHPExcel_Reader_Excel2007(); //建立reader对象,excel—2007以后格式
        if (!$PHPReader->canRead($file)) {
            $PHPReader = new \PHPExcel_Reader_Excel5();//建立reader对象,excel—2007以前格式
            if (!$PHPReader->canRead($file)) {
                $msg = '不是excel格式文件';
                $this->apiReturn(303,$msg);
            }
        }
        $PHPExcel = $PHPReader->load($file); //加载excel对象
        $sheet = $PHPExcel->getSheet(0); //获取指定的sheet表
        $rows = $sheet->getHighestRow();//行数
        $cols = $sheet->getHighestColumn();//列数

        $data = array();
        for ($i = 1; $i <= $rows; $i++){ //行数是以第1行开始
            $count = 0;
            for ($j = 'A'; $j <= $cols; $j++) { //列数是以A列开始
                $value = $sheet->getCell($j . $i)->getValue();
                if ($value) {
                    $data[$i - 1][$count] = (string)$sheet->getCell($j . $i)->getValue();
                    $count += 1;
                }
            }
        }
        return $data;
    }
【第三步】】新建一个控制器:Import.php,Import控制器中新建一个方法importTeacher()(这里的代码,请按照实际需求更改),在该方法中调用Base.php中的importExcel()方法,如下
	//导入老师信息
    public function importTeacher()
    {
        //接收上传文件
        $file = input('file');
        if (!$file) {
            $this->apiReturn(303, '缺少file');
        }
        //调用导入excel方法
        $data = $this->importExcel($file);
        $sql = [];
        for ($i = 1; $i < count($data); $i++) {
            $sql[$i]['number'] = $data[$i][0];//老师工号
            $sql[$i]['name'] = $data[$i][1];//姓名
            $sql[$i]['gender'] = $data[$i][2];//性别
            $sql[$i]['remarks'] = isset($data[$i][3]) ? $data[$i][3] : '此老师没有备注信息';;//备注      
        }
        //写入数据库
        Db::name('auth')->insertAll($sql);
    }

注意你导入的excel表中的数据顺序要和你for循环的顺序要一致

总结

此例,大致分为二个大步骤:

1.将下载的 1.8版本扩展包融合到TP5.0框架中;

2.在base.php写一个导入函数;

3.在控制器中调用该公共函数,并循环解析数据写入数据库

至此,TP5.0的excel导入功能已经基本完成,如需其他配置,请参考phpExcel开发文档。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐