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 error_log 函数的使用
Apr 13 PHP
简单的php 验证图片生成函数
May 21 PHP
phpMyAdmin链接MySql错误 个人解决方案
Dec 28 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
Apr 23 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
php中文验证码实现方法
Jun 18 PHP
yii分页组件用法实例分析
Dec 28 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
php文件上传后端处理小技巧
May 22 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
PHP 实现链式操作
Mar 09 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简介
2006/10/09 PHP
PHP中用hash实现的数组
2011/07/17 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
javascript 动态生成私有变量访问器
2009/12/06 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
Python Socket编程入门教程
2014/07/11 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
python3将变量输入的简单实例
2020/08/19 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
致跳远运动员广播稿
2014/02/11 职场文书
体育节口号
2014/06/19 职场文书
会员卡清退活动总结
2014/08/27 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
房屋认购协议书
2015/01/29 职场文书
优秀教师个人总结
2015/02/11 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL
公历12个月名称的由来
2022/04/12 杂记
MySQL索引失效场景及解决方案
2022/07/23 MySQL