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 stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
php SQL Injection with MySQL
Feb 27 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
php smtp实现发送邮件功能
Jun 22 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 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建立Ftp连接的方法
2015/03/07 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
python局域网ip扫描示例分享
2014/04/03 Python
pycharm 使用心得(四)显示行号
2014/06/05 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
浅谈MySQL中的触发器
2015/05/05 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
python编程嵌套函数实例代码
2018/02/11 Python
Python多继承顺序实例分析
2018/05/26 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
优秀团员自我评价范文
2014/04/23 职场文书
企业人事任命书
2014/06/05 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
工作失职检讨书范文
2015/05/05 职场文书
公司员工手册范本
2015/05/14 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
公司管理制度范本
2015/08/03 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android