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

2018-09-07 21:27

阅读:296

  最近在做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); //开启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上传文件类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.测试

  感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


评论


亲,登录后才可以留言!