Yii实现Excel导入三级分类数据表

来源:互联网 发布:万达影城知乎 编辑:程序博客网 时间:2024/05/23 13:03

1.把已经下载好的PHPExcel类放入Vendor目录下

2.在项目入口文件index.PHP加载:

  1. require dirname(dirname(__FILE__)).'/vendor/phpexcel/PHPExcel.php';  

3.在config/web.php中的components键中加入:

  1. 'aliases' => [  
  2.     'class'=>'PHPExcel',  //如果不定义该类,将会报错。值就是在phpqrcode.php中定义的命名空间  
  3.     '@phpqrcode' => '@vendor/phpexcel/PHPExcel/',  //@phpqrcode 就是在phpqrcode.php中定义的命名空间,@vendor/phpqrcode 为该类的路径  
  4. ],  

4.直接上Controller.php代码

  1. <?php  
  2. namespace app\controllers;  
  3.   
  4. use Yii;  
  5. use yii\web\Controller;  
  6. use PHPExcel,PHPExcel_Reader_Excel2007,PHPExcel_Reader_Excel5,PHPExcel_IOFactory,PHPExcel_Cell;  
  7.   
  8. class ShopCategoryController extends Controller{  
  9.   
  10.     public function actionImport(){  
  11.         header("content-type:text/html;charset=utf-8");  
  12.         $PHPExcel = new PHPExcel();  
  13.         //print_r($PHPExcel);die;  
  14.         $filePath = 'shop_category.xlsx';  
  15.         //判断打开文件的方式  
  16.         $objReader = new PHPExcel_Reader_Excel2007();  
  17.         if(!$objReader->canRead($filePath)){  
  18.             $objReader = new PHPExcel_Reader_Excel5();  
  19.             if(!$objReader->canRead($filePath)){  
  20.                 echo 'no Excel';  
  21.                 return ;  
  22.             }  
  23.         }  
  24.         $objReader->setReadDataOnly(true);  
  25.         $objPHPExcel = $objReader->load($filePath);  
  26.         $objWorksheet = $objPHPExcel->getActiveSheet();  
  27.         $highestRow = $objWorksheet->getHighestRow();  
  28.         $highestColumn = $objWorksheet->getHighestColumn();  
  29.         $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);  
  30.         $excelData = array();  
  31.         for ($row = 1; $row <= $highestRow; $row++) {  
  32.             for ($col = 0; $col < $highestColumnIndex; $col++) {  
  33.                 $excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();  
  34.             }  
  35.         }  
  36.         //print_r($excelData);die;  
  37.         $res = array();  
  38.         foreach($excelData as $key =>$val){  
  39.             if(isset($res[$val[0]])){  
  40.                 $res[$val[0]][$val[1]][] = ltrim($val[2]);  
  41.             }else{  
  42.                 $res[$val[0]] = [  
  43.                     $val[1]=>[  
  44.                         ltrim($val[2]),  
  45.                     ]  
  46.                 ];  
  47.             }  
  48.         }  
  49.         //echo '<pre>';  
  50.         //print_r($res);  
  51.         //exit();  
  52.         $connect=Yii::$app->db;  
  53.         foreach($res as $one_key =>$one_val){  
  54.             //print_r($one_key); die;  //一级分类:美食购物休闲娱乐、健身医疗保健旅游、文化、教育其他  
  55.             $sql_add = "insert into shop_category(p_name,p_id) values('".$one_key."',0)";  
  56.             $connect->createCommand($sql_add)->execute();  
  57.             $level_one_id = $connect->getLastInsertID();  
  58.   
  59.             foreach($one_val as $two_key => $two_val){  
  60.                 print_r($two_key); // 二级分类:中餐东南亚餐西餐美食、日韩餐    小吃快餐。。。。。  
  61.                 $sql_add = "insert into shop_category(p_name,p_id) values('".$two_key."',$level_one_id)";  
  62.                 $connect->createCommand($sql_add)->execute();  
  63.                 $level_two_id = $connect->getLastInsertID();  
  64.   
  65.                 foreach($two_val as $three_key =>$three_val){  
  66.                     $sql_add = "insert into shop_category(p_name,p_id) values('".$three_val."',$level_two_id)";  
  67.                     $connect->createCommand($sql_add)->execute();  
  68.                 }  
  69.             }  
  70.         }  
  71.         echo "<script>alert('导入成功');window.history.go(-1);</script>";  
  72.     }  

0 0