首页 > 开发 > PHP > 正文

PHP上传Excel文件导入数据到MySQL数据库示例

2024-05-04 22:51:36
字体:
来源:转载
供稿:网友

最近在做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);

2.生成项目

先在ThinkPHP同级目录下新建index.php文件,生成项目Home.

<?php define('APP_NAME', 'Home');  //项目名称define('APP_PATH', './Home/'); //项目路径define('APP_DEBUG', true);   //开启DEBUGrequire './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 "添加失败!";    }  } }?>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表