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 变量定义和变量替换的方法
Jul 30 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
smarty中js的调用方法示例
Oct 27 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
WordPress中is_singular()函数简介
2015/02/05 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
自制PHP框架之设计模式
2017/05/07 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
javascript 树控件 比较好用
2009/06/11 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
python 中的divmod数字处理函数浅析
2017/10/17 Python
python3.6的venv模块使用详解
2018/08/01 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
班组长岗位职责范本
2014/01/05 职场文书
读书活动总结范文
2014/04/26 职场文书
保护动物的标语
2014/06/11 职场文书
嘉宾邀请函
2015/01/31 职场文书
银行实习推荐信
2015/03/27 职场文书
股东大会通知
2015/04/24 职场文书
建房合同协议书
2016/03/21 职场文书