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


Posted in PHP onApril 13, 2020

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

Model模型

<?php
/**
 * 描述...
 * @author zcy
 * @date 2019/8/13
 */

namespace app\models;

use yii\base\Model;
use yii\db\ActiveRecord;
use yii\web\UploadedFile;

class uploadForm extends ActiveRecord
{
  public $file;

  public function rules()
  {
    return [
      [['file'],'file', 'skipOnEmpty' => false,'extensions' => 'xls,xlsx'],
    ];
  }

  public function attributeLabels()
  {
    return [
      'file'=> '上传文件'
    ];
  }

  public function upload()
  {
    $file = UploadedFile::getInstance($this, 'file');

    if ($this->rules()) {
      $tmp_file = $file->baseName . '.' . $file->extension;
      $path = 'upload/' . 'Files/';
      if (is_dir($path)) {
        $file->saveAs($path . $tmp_file);
      } else {
        mkdir($path, 0777, true);
      }
      $file->saveAs($path . $tmp_file);
      return true;
    } else {
      return '验证失败';
    }
  }

}

Views视图

<?php

use yii\widgets\ActiveForm;

$model = new app\models\uploadForm();
$form = ActiveForm::begin([
  'id' => 'upload',
  'options' => ['enctype' => 'multipart/form-data'],
])
?>

<?= $form->field($model,'file')->fileInput(['multiple'=>'multiple']) ?>

  <button>上传</button>
<?php ActiveForm::end() ?>

Controller控制器

<?php
/**
 * 描述...
 * @author zcy
 * @date 2019/8/16
 */

namespace app\controllers;

use app\models\uploadForm;
use Yii;
use yii\web\Controller;
use yii\web\UploadedFile;

class UploadController extends Controller
{
  /**
   * 导入
   * @author zcy
   * @date 2019/8/16
   */
  public function actionImport()
  {
    $model = new uploadForm();

    if (Yii::$app->request->isPost) {
      $model->file = UploadedFile::getInstance($model,'file');
//      if ($model->upload()) {
//        print <<<EOT
// <script>alert('上传成功')</script>
//EOT;
//      } else {
//        print <<<EOT
// <script>alert('上传失败')</script>
//EOT;
//      }
      if (!$model->upload()) {
        print <<<EOT
 <script>alert('上传失败')</script>
EOT;
      }
    }

    $ok = 0;
    if ($model->load(Yii::$app->request->post())) {
      $file = UploadedFile::getInstance($model,'file');

      if ($file) {
        $filename = 'upload/Files/' . $file->name;
        $file->saveAs($filename);

        if (in_array($file->extension,array('xls','xlsx'))) {
          $fileType = \PHPExcel_IOFactory::identify($filename);//文件名自动判断类型
          $excelReader = \PHPExcel_IOFactory::createReader($fileType);

          $phpexcel = $excelReader->load($filename)->getSheet(0);//载入文件并获取第一个sheet
          $total_line = $phpexcel->getHighestRow();//总行数
          $total_column = $phpexcel->getHighestColumn();//总列数

          if (1 < $total_line) {
            for ($row = 2;$row <= $total_line;$row++) {
              $data = [];
              for ($column = 'A';$column <= $total_column;$column++) {
                $data[] = trim($phpexcel->getCell($column.$row));
              }

              $info = Yii::$app->db->createCommand()
->insert('{{%shop_info}}',['shop_name' => $data[0],'shop_type' => $data[1]])
->execute();

              if ($info) {
                $ok = 1;
              }
            }
          }

          if ($ok == 1) {
            echo "<script>alert('导入成功');window.history.back();</script>";
          } else {
            echo "<script>alert('操作失败');window.history.back();</script>";
          }
        }
      }
    } else {
      return $this->render('import',['model' => $model]);
    }
  }
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php 输出双引号&quot;与单引号'的方法
May 09 PHP
深入解析php中的foreach函数
Aug 31 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
php生成RSS订阅的方法
Feb 13 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
php网页版聊天软件实现代码
Aug 12 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
PHP实现的日历功能示例
Sep 01 PHP
php实现session共享的实例方法
Sep 19 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 25 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 PHP
php回调函数处理数组操作示例
Apr 13 #PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 #PHP
laravel使用数据库测试注意事项
Apr 10 #PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 #PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 #PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 #PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 #PHP
You might like
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
DOM 基本方法
2009/07/18 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Python开发常用的一些开源Package分享
2015/02/14 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
通过实例解析python描述符原理作用
2020/01/22 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
详解python中的闭包
2020/09/07 Python
会计工作总结范文2014
2014/12/23 职场文书
社区文明倡议书
2015/04/28 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers