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绝对路径与相对路径之间关系的的分析
Mar 03 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
php类常量用法实例分析
Jul 09 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 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
php Mysql日期和时间函数集合
2007/11/16 PHP
解析php常用image图像函数集
2013/06/24 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
nodejs教程之入门
2014/11/21 NodeJs
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
js变量提升深入理解
2016/09/16 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
简单谈谈JS中的正则表达式
2017/09/11 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
文秘应聘自荐书范文
2014/02/18 职场文书
根叔历年演讲稿
2014/05/20 职场文书
求职自我评价范文100字
2014/09/23 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
golang中的并发和并行
2021/05/08 Golang