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制作简单的内容采集器的原理分析
Oct 01 PHP
PHP DataGrid 实现代码
Aug 12 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php实现统计网站在线人数的方法
May 12 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 PHP
php tpl模板引擎定义与使用示例
Aug 09 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
一篇不错的PHP基础学习笔记
2007/03/18 PHP
PHPUnit PHP测试框架安装方法
2011/03/23 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
bootstrap table小案例
2016/10/21 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
vue 中swiper的使用教程
2018/05/22 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
Python实现的knn算法示例
2018/06/14 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python下载库的步骤方法
2019/10/12 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
如何基于python操作excel并获取内容
2019/12/24 Python
Python多进程编程常用方法解析
2020/03/26 Python
Python调用C语言程序方法解析
2020/07/07 Python
资料员的岗位职责
2013/11/20 职场文书
春节晚会主持词
2014/03/24 职场文书
《金子》教学反思
2014/04/13 职场文书
伊索寓言教学反思
2014/05/01 职场文书
办公经费申请报告
2015/05/15 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
校运会加油稿大全
2015/07/22 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
JavaScript 定时器详情
2021/11/11 Javascript