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文件

<html>

  <head>

    <title>上传文件</title>

    <meta charset="UTF-8">

  </head>

  <body>

    <form id="upload" action="__URL__/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 "添加失败!";

    }

  }

  

}

?>

5.测试

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值