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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
一个用php实现的获取URL信息的类
Jan 02 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
浅谈laravel中的关联查询with的问题
Oct 10 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
ajax php 实现写入数据库
2009/09/02 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
一则python3的简单爬虫代码
2014/05/26 Python
Python实现多线程下载文件的代码实例
2014/06/01 Python
python Django批量导入不重复数据
2016/03/25 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
工程开工庆典邀请函
2014/02/01 职场文书
毕业典礼演讲稿
2014/05/13 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
学习普通话的体会
2014/11/07 职场文书
人事局接收函
2015/01/31 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers