THinkPHP关于PHPExcel的导入导出
最近项目需要,用过几次PHPExcel类,就随手把碰到的坑和代码贴出来
首先是先下载PHPExcel类。 下载地址:https://github.com/PHPOffice/PHPExcel
ThinkPHP和CodeIgniter个人感觉用法是一样的,只是导入类库的位置不同
首先是ThinkPHP放置类的位置
在THinkPHP下Vendor下新建一个PHPExcel文件, 然后将下载的类放进去,用
vendor('PHPExcel.PHPExcel');
就可以引用第三方的类库了
类库已经准备好了,下面开始进入导入
首先 需要一个from表单
<form action="{:U('Index/import')}" enctype="multipart/form-data" method="post" accept-charset="utf-8">
是上传文件类型的,需要加上enctype='multipart/form-data'
在对应的controller中进行文件上传,上传以后获取到上传文件的路径和名字,也就是我下面的$file
代码中$this->import_exl($file);是我调用了自己的一个方法
public function Import() { if ($_FILES['file']['tmp_name']) { //上传附件 if ($_FILES['file']['type'] != 'application/vnd.ms-excel') { $this->error('不是Excel文件,请重新上传'); } $year = date("Y"); $mo = date("m-d"); $config = array( 'maxSize' => 31457285252525, 'rootPath' => './public/upload/' . $year . '/' . $mo . '/', 'savePath' => '', 'saveName' => array('uniqid', ''), 'autoSub' => true, 'subName' => '', ); if (!is_dir($config['rootPath'])) mkdir($config['rootPath'], 0777, true); $upload = new \Think\Upload($config);// 实例化上传类 $info = $upload->uploadOne($_FILES['file']); $file = $config['rootPath'] . $info['savename']; } if ($info) { //上传成功 $data = $this->import_exl($file); var_dump($data); //data就是Excel表中的内容, 可以直接上传至数据库了 } }
我把获取Excel内容进行了封装,这样看起来不是太乱,而且使用的时候直接传入一个文件的路径就可以获取到比较方便, 下面我把代码贴出来
public function import_exl($file_name){ vendor('PHPExcel.PHPExcel'); $objPHPExcel = new \PHPExcel(); $objReader = \PHPExcel_IOFactory::createReader('Excel5'); $objPHPExcel = $objReader->load($file_name,$encode='utf-8'); $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumn = $sheet->getHighestColumn(); // 取得总列数 for($i=2;$i<$highestRow+1;$i++){ $data[$i]['goods_name'] = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue(); $data[$i]['brand'] = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getValue(); $data[$i]['specification'] = $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getValue(); $data[$i]['store_count'] = $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getValue(); $data[$i]['shop_price'] = $objPHPExcel->getActiveSheet()->getCell('E'.$i)->getValue(); } return $data; }
最后return出来的data,就是上传的Excel文件的内容,是一个键对值的内容,可以根据自己的要求进行修改,然后根据需要进行处理或者入库,就比较简单了,如果有错误或者可以优化的地方,还请大神指点ଲ