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中的实现trim函数代码
Mar 19 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
Laravel 5.3 学习笔记之 安装
Aug 28 PHP
php自定义时间转换函数示例
Dec 07 PHP
PHP对象实例化单例方法
Jan 19 PHP
php之可变函数的实例详解
Sep 13 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 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与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP运行模式汇总
2016/11/06 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
Python中Django 后台自定义表单控件
2017/03/28 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
python list转置和前后反转的例子
2019/08/26 Python
团工委书记自荐书范文
2013/12/17 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
初中英语课后反思
2014/04/25 职场文书
家长会标语
2014/06/24 职场文书
党在我心中演讲稿
2014/09/02 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
Python基础之函数嵌套知识总结
2021/05/23 Python
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
Python OpenGL基本配置方式
2022/05/20 Python