php教程

超轻量级php框架startmvc

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

更新时间:2020-03-13 16:02:18 作者:startmvc
最近在做Excel文件导入数据到数据库。网站如果想支持批量插入数据,可以制作一个上传Exce

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

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

phpexcel导入数据库 excel批量导入数据库 php 批量导入数据库