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原理之异常机制深入分析
Aug 08 PHP
Uncaught exception com_exception with message Failed to create COM object
Jan 11 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
PHP 超级全局变量相关总结
Jun 30 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中使用Oracle数据库(1)
2006/10/09 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
PHP常用的小程序代码段
2015/11/14 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
JS实现的找零张数最小问题示例
2017/11/28 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
python的turtle库使用详解
2019/05/10 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
比利时香水网上商店:NOTINO
2018/03/28 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
先进事迹报告会感言
2014/01/24 职场文书
趣味运动会策划方案
2014/06/02 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
小学运动会开幕词
2015/01/28 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js