美文网首页Excel
ThinkPHP上传Excel文件导入数据到MySQL数据库示例

ThinkPHP上传Excel文件导入数据到MySQL数据库示例

作者: geeooooz | 来源:发表于2017-08-17 10:23 被阅读267次

    这篇文章主要介绍了PHP上传Excel文件导入数据到MySQL数据库示例。

    最近在做Excel文件导入数据到数据库。网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序。

    要用到的工具:

    ThinkPHP:轻量级国产PHP开发框架。可在ThinkPHP官网下载。

    PHPExcel:Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可在CodePlex官网下载。、

    1.设计MySQL数据库product

    创建product数据库

    CREATE DATABASE product DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    创建pro_info表,表结构

    CREATE TABLE pro_info(
    pId int(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    pName varchar(20) NOT NULL,
    pPrice float NOT NULL,
    pCount float NOT NULL
    );
    

    2.生成项目

    先在ThinkPHP同级目录下新建index.php文件,生成项目Home.

    <?php
       
    define('APP_NAME', 'Home');  //项目名称
    define('APP_PATH', './Home/'); //项目路径
    define('APP_DEBUG', true);   //开启DEBUG
    require './ThinkPHP/ThinkPHP.php';  //引入ThinkPHP核心运行文件
    ?>
    

    3.上传文件表单

    在Home/Tpl文件夹下新建Index文件夹,里面新建index.html文件

    <!DOCTYPE html>
       
    <html>
      <head>
        <title>上传文件</title>
        <meta charset="UTF-8">
      </head>
      <body>
        <form id="upload" action="/index.php/Write/upload/" method="post" enctype="multipart/form-data">
          <label for="file">上传文件:</label>
          <input type="file" name="file" id="file"><br />
          <input type="submit" name="submit" value="上传" />
        </form>
      </body>
    </html>
    

    4.在/Home/Lib/Action/IndexAction.class.php中编写显示上传表单页面、上传Excel文件、导入Excel文件方法(如果ThinkPHP/Extend下没有扩展包,需要在ThinkPHP官网下载,然后将扩展包解压放入)

    <?php
       
    /**
    *
    * 导入Excel文件数据到MySQL数据库
    */
    class IndexAction extends Action {
       
      /**
       * 显示上传表单html页面
       */
      public function index() {
        $this->display();
      }
       
      /**
       * 上传Excel文件
       */
      public function upload() {
        //引入ThinkPHP上传文件类
        import('ORG.Net.UploadFile');
        //实例化上传类
        $upload = new UploadFile();
        //设置附件上传文件大小200Kib
        $upload->mixSize = 2000000;
        //设置附件上传类型
        $upload->allowExts = array('xls', 'xlsx', 'csv');
        //设置附件上传目录在/Home/temp下
        $upload->savePath = './Home/temp/';
        //保持上传文件名不变
        $upload->saveRule = '';
        //存在同名文件是否是覆盖
        $upload->uploadReplace = true;
        if (!$upload->upload()) {  //如果上传失败,提示错误信息
          $this->error($upload->getErrorMsg());
        } else {  //上传成功
          //获取上传文件信息
          $info = $upload->getUploadFileInfo();
          //获取上传保存文件名
          $fileName = $info[0]['savename'];
          //重定向,把$fileName文件名传给importExcel()方法
          $this->redirect('Index/importExcel', array('fileName' => $fileName), 1, '上传成功!');
        }
      }
       
      /**
       *
       * 导入Excel文件
       */
      public function importExcel() {
        header("content-type:text/html;charset=utf-8");
        //引入PHPExcel类
        vendor('PHPExcel');
        vendor('PHPExcel.IOFactory');
        vendor('PHPExcel.Reader.Excel5');
       
        //redirect传来的文件名
        $fileName = $_GET['fileName'];
       
        //文件路径
        $filePath = './Home/temp/' . $fileName . '.xlsx';
        //实例化PHPExcel类
        $PHPExcel = new PHPExcel();
        //默认用excel2007读取excel,若格式不对,则用之前的版本进行读取
        $PHPReader = new PHPExcel_Reader_Excel2007();
        if (!$PHPReader->canRead($filePath)) {
          $PHPReader = new PHPExcel_Reader_Excel5();
          if (!$PHPReader->canRead($filePath)) {
            echo 'no Excel';
            return;
          }
        }
       
        //读取Excel文件
        $PHPExcel = $PHPReader->load($filePath);
        //读取excel文件中的第一个工作表
        $sheet = $PHPExcel->getSheet(0);
        //取得最大的列号
        $allColumn = $sheet->getHighestColumn();
        //取得最大的行号
        $allRow = $sheet->getHighestRow();
        //从第二行开始插入,第一行是列名
        for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
          //获取B列的值
          $name = $PHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue();
          //获取C列的值
          $price = $PHPExcel->getActiveSheet()->getCell("C" . $currentRow)->getValue();
          //获取D列的值
          $count = $PHPExcel->getActiveSheet()->getCell("D" . $currentRow)->getValue();
       
          $m = M('Info');
          $num = $m->add(array('pName' => $name, 'pPrice' => $price, 'pCount' => $count));
        }
        if ($num > 0) {
          echo "添加成功!";
        } else {
          echo "添加失败!";
        }
      }
       
    }
    ?>
    

    相关文章

      网友评论

        本文标题:ThinkPHP上传Excel文件导入数据到MySQL数据库示例

        本文链接:https://www.haomeiwen.com/subject/hisgrxtx.html