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+DBM的同学录程序(5)
Oct 09 PHP
随时给自己贴的图片加文字的php水印
Mar 16 PHP
php 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
php 传值赋值与引用赋值的区别
Dec 29 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
PHP生成随机密码类分享
Jun 25 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 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
论建造顺序的重要性
2020/03/04 星际争霸
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php输出xml属性的方法
2015/03/19 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
python求crc32值的方法
2014/10/05 Python
Python实现的批量下载RFC文档
2015/03/10 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
Java如何支持I18N?
2016/10/31 面试题
工程资料员岗位职责
2014/03/10 职场文书
物流管理专业自荐信
2014/06/23 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python