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安装攻略:常见问题解答(一)
Oct 09 PHP
第十一节--重载
Nov 16 PHP
PHP 加密与解密的斗争
Apr 17 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
PHP写UltraEdit插件脚本实现方法
Dec 26 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
php json中文编码为null的解决办法
Dec 14 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python遍历指定文件及文件夹的方法
2015/05/09 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
python实现Flappy Bird源码
2018/12/24 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
Python调用Windows命令打印文件
2020/02/07 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
入队仪式主持词
2015/07/04 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers