当前位置:首页 > CMS教程 > 其它CMS > 列表

yii2.0框架实现上传excel文件后导入到数据库的方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-26 08:56:50 浏览: 评论:0 

本文实例讲述了yii2.0框架实现上传excel文件后导入到数据库的方法,分享给大家供大家参考,具体如下:

Model模型

  1. <?php 
  2. /** 
  3.  * 描述... 
  4.  * @author zcy 
  5.  * @date 2019/8/13 
  6.  */ 
  7.  
  8. namespace app\models; 
  9.  
  10. use yii\base\Model; 
  11. use yii\db\ActiveRecord; 
  12. use yii\web\UploadedFile; 
  13.  
  14. class uploadForm extends ActiveRecord 
  15.   public $file
  16.  
  17.   public function rules() 
  18.   { 
  19.     return [ 
  20.       [['file'],'file''skipOnEmpty' => false,'extensions' => 'xls,xlsx'], 
  21.     ]; 
  22.   } 
  23.  
  24.   public function attributeLabels() 
  25.   { 
  26.     return [ 
  27.       'file'=> '上传文件' 
  28.     ]; 
  29.   } 
  30.  
  31.   public function upload() 
  32.   { 
  33.     $file = UploadedFile::getInstance($this'file'); 
  34.  
  35.     if ($this->rules()) { 
  36.       $tmp_file = $file->baseName . '.' . $file->extension; 
  37.       $path = 'upload/' . 'Files/'
  38.       if (is_dir($path)) { 
  39.         $file->saveAs($path . $tmp_file); 
  40.       } else { 
  41.         mkdir($path, 0777, true); 
  42.       } 
  43.       $file->saveAs($path . $tmp_file); 
  44.       return true; 
  45.     } else { 
  46.       return '验证失败'
  47.     } 
  48.   } 
  49.  

Views视图

  1. <?php 
  2.  
  3. use yii\widgets\ActiveForm; 
  4.  
  5. $model = new app\models\uploadForm(); 
  6. $form = ActiveForm::begin([ 
  7.   'id' => 'upload'
  8.   'options' => ['enctype' => 'multipart/form-data'], 
  9. ]) 
  10. ?> 
  11.  
  12. <?= $form->field($model,'file')->fileInput(['multiple'=>'multiple']) ?> 
  13.  
  14.   <button>上传</button> 
  15. <?php ActiveForm::end() ?> 

Controller控制器

  1. <?php 
  2. /** 
  3.  * 描述... 
  4.  * @author zcy 
  5.  * @date 2019/8/16 
  6.  */ 
  7.  
  8. namespace app\controllers; 
  9.  
  10. use app\models\uploadForm; 
  11. use Yii; 
  12. use yii\web\Controller; 
  13. use yii\web\UploadedFile; 
  14.  
  15. class UploadController extends Controller 
  16.   /** 
  17.    * 导入 
  18.    * @author zcy 
  19.    * @date 2019/8/16 
  20.    */ 
  21.   public function actionImport() 
  22.   { 
  23.     $model = new uploadForm(); 
  24.  
  25.     if (Yii::$app->request->isPost) { 
  26.       $model->file = UploadedFile::getInstance($model,'file'); 
  27. //      if ($model->upload()) { 
  28. //        print <<<EOT 
  29. // <script>alert('上传成功')</script> 
  30. //EOT; 
  31. //      } else { 
  32. //        print <<<EOT 
  33. // <script>alert('上传失败')</script> 
  34. //EOT; 
  35. //      } 
  36.       if (!$model->upload()) { 
  37.         print <<<EOT 
  38.  <script>alert('上传失败')</script> 
  39. EOT; 
  40.       } 
  41.     } 
  42.  
  43.     $ok = 0; 
  44.     if ($model->load(Yii::$app->request->post())) { 
  45.       $file = UploadedFile::getInstance($model,'file'); 
  46.  
  47.       if ($file) { 
  48.         $filename = 'upload/Files/' . $file->name; 
  49.         $file->saveAs($filename); 
  50.  
  51.         if (in_array($file->extension,array('xls','xlsx'))) { 
  52.           $fileType = \PHPExcel_IOFactory::identify($filename);//文件名自动判断类型 
  53.           $excelReader = \PHPExcel_IOFactory::createReader($fileType); 
  54.  
  55.           $phpexcel = $excelReader->load($filename)->getSheet(0);//载入文件并获取第一个sheet 
  56.           $total_line = $phpexcel->getHighestRow();//总行数 
  57.           $total_column = $phpexcel->getHighestColumn();//总列数 
  58.  
  59.           if (1 < $total_line) { 
  60.             for ($row = 2;$row <= $total_line;$row++) { 
  61.               $data = []; 
  62.               for ($column = 'A';$column <= $total_column;$column++) { 
  63.                 $data[] = trim($phpexcel->getCell($column.$row)); 
  64.               } 
  65.  
  66.               $info = Yii::$app->db->createCommand() 
  67. ->insert('{{%shop_info}}',['shop_name' => $data[0],'shop_type' => $data[1]]) 
  68. ->execute(); 
  69.  
  70.               if ($info) { 
  71.                 $ok = 1; 
  72.               } 
  73.             } 
  74.           } 
  75.  
  76.           if ($ok == 1) { 
  77.             echo "<script>alert('导入成功');window.history.back();</script>"
  78.           } else { 
  79.             echo "<script>alert('操作失败');window.history.back();</script>"
  80.           } 
  81.         } 
  82.       } 
  83.     } else { 
  84.       return $this->render('import',['model' => $model]); 
  85.     } 
  86.   } 
  87. }

Tags: yii2.0上传excel文件

分享到: