最近在做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
|
<?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文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!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官网下载,然后将扩展包解压放入)
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
|
<?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.测试
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!