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


Posted in PHP onOctober 25, 2016

最近在做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
);

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

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="__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.测试

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
PHP脚本的10个技巧(1)
Oct 09 PHP
php 注释规范
Mar 29 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
基于initPHP的框架介绍
Apr 18 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
php调用自己java程序的方法详解
May 13 PHP
php函数传值的引用传递注意事项分析
Jun 25 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 PHP
php+iframe 实现上传文件功能示例
Mar 04 PHP
详解PHP中foreach的用法和实例
Oct 25 #PHP
php array_keys 返回数组的键名
Oct 25 #PHP
php array_key_exists() 与 isset() 的区别
Oct 24 #PHP
PHP实现简易blog的制作
Oct 24 #PHP
php基于websocket搭建简易聊天室实践
Oct 24 #PHP
详解php中 === 的使用
Oct 24 #PHP
使用PHP免费发送定时短信的实例
Oct 24 #PHP
You might like
生成缩略图
2006/10/09 PHP
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
javascript实现获取服务器时间
2015/05/19 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
python3实现windows下同名进程监控
2018/06/21 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
浅谈Python 递归算法指归
2019/08/22 Python
python实现XML解析的方法解析
2019/11/16 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
社区安全生产月活动总结
2014/07/05 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
死者家属慰问信
2015/03/24 职场文书
小学教研工作总结2015
2015/05/13 职场文书
学生会任命书范本
2015/09/21 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
详解MySQL的半同步
2021/04/22 MySQL
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js