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 win下Socket方式发邮件类
Aug 21 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP无法访问远程mysql的问题分析及解决
May 16 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
PHP微信开发之有道翻译
Jun 23 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
实时获取Python的print输出流方法
2019/01/07 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
基于python图像处理API的使用示例
2020/04/03 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
如何现实servlet的单线程模式
2014/08/05 面试题
实习生单位鉴定意见
2013/12/04 职场文书
手机银行营销方案
2014/03/14 职场文书
高中班主任评语大全
2014/04/25 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
优秀团员个人总结
2015/02/26 职场文书
十月围城观后感
2015/06/08 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书