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

最近在做Excel文件导入数据到数据库。网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序。

要用到的工具:

ThinkPHP:轻量级国产PHP开发框架。可在ThinkPHP官网下载。

PHPExcel:Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可在CodePlex官网下载。、

1.设计MySQL数据库product

创建product数据库

?
1
CREATE DATABASE product DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

创建pro_info表,表结构

?
1
2
3
4
5
6
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.

?
1
2
3
4
5
6
7
  
define( 'APP_NAME' , 'Home' );  //项目名称
define( 'APP_PATH' , './Home/' ); //项目路径
define( 'APP_DEBUG' , true);   //开启DEBUG
require './ThinkPHP/ThinkPHP.php' //引入ThinkPHP核心运行文件
?>

3.上传文件表单

在Home/Tpl文件夹下新建Index文件夹,里面新建index.html文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  
< 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官网下载,然后将扩展包解压放入)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  
/**
*
* 导入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数据库示例)