最近在做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.测试
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!