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 相关文章推荐
判“新”函数:得到今天与明天的秒数
Oct 09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
php实现aes加密类分享
Feb 16 PHP
php目录操作实例代码
Feb 21 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 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
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
python提示No module named images的解决方法
2014/09/29 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python 2.7.14安装图文教程
2018/04/08 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
python列表list保留顺序去重的实例
2018/12/14 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
大三学生入党思想汇报
2014/01/02 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
四风问题查摆材料
2014/08/25 职场文书
大学四年个人总结
2015/03/03 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS