当遇到需要批量导入数据的时候,前端会上传一个excel表格,由后端读取数据并存入数据库。前端代码就不介绍了,这是一个前后端分离的项目,主要是讲解后端读取excel表格的数据。前端上传文件就可以了。
PHPExcel 是什么
是用来操作office excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如Excel(BIFF).xls,Excel 2007 (OfficeOpenXML),.xlsx,CSV,Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
PHP 5.2.0 版本及以上
PHP extension php_zip 开启 (如果你需要使用 PHPExcel 来操作 .xlsx .ods or .gnumeric 文件)
PHP extension php_xml 开启
PHP extension php_gd2 开启(选填, 如果需要计算准确的列宽需要开启此扩展)
PHP 读取文件写入数据库
header
(
"Content-type:text/html; charset=utf-8"
);
header
(
"Access-Control-Allow-Origin:*"
);
header
(
'Access-Control-Allow-Methods:POST'
);
header
(
'Access-Control-Allow-Headers:x-requested-with, content-type'
);
include
'./config/config.php'
;
include
"./PHPExcel-1.8/Classes/PHPExcel/IOFactory.php"
;
$file
=
$_FILES
[
'file'
];
$fileTmp
=
$file
[
'tmp_name'
];
$fileSize
=
$file
[
'size'
];
$fileName
=
$file
[
'name'
];
$fileError
=
$file
[
'error'
];
if
(
$fileError
==
0
) {
$inputFileName
=
$fileTmp
;
date_default_timezone_set
(
'PRC'
);
try
{
$inputFileType
=
PHPExcel_IOFactory
::
identify
(
$inputFileName
);
$objReader
=
PHPExcel_IOFactory
::
createReader
(
$inputFileType
);
$objPHPExcel
=
$objReader
->
load
(
$inputFileName
);
}
catch
(
Exception
$e
) {
$sheet
=
$objPHPExcel
->
getSheet
(
0
);
$highestRow
=
$sheet
->
getHighestRow
();
$highestColumn
=
$sheet
->
getHighestColumn
();
$time
=
date
(
'Y-m-d h:i:s'
,
time
());
$array
=
array
();
$time
=
date
(
'Y-m-d h:i:s'
,
time
());
for
(
$row
=
2
;
$row
<=
$highestRow
;
$row
++) {
$rowData
=
$sheet
->
rangeToArray
(
'A'
.
$row
.
':'
.
$highestColumn
.
$row
,
NULL
,
TRUE
,
FALSE
);
$falg
=
$rowData
[
0
][
0
];
$sqlIf
=
"SELECT codes FROM tablef where codes = '
$falg
'"
;
$querySQL
=
mysqli_query
(
$conn
,
$sqlIf
);
$arrSQL
=
mysqli_fetch_array
(
$querySQL
);
if
(
$arrSQL
==
null
) {
$sql
=
"insert into tablef(codes,year,month,idcode,type,timese) values('"
.
$rowData
[
0
][
0
].
"','"
.(
$rowData
[
0
][
1
]).
"','"
.
$rowData
[
0
][
2
].
"','"
.
$rowData
[
0
][
3
].
"','"
.
$rowData
[
0
][
4
].
"','"
.
$time
.
"')"
;
$query
=
mysqli_query
(
$conn
,
$sql
);
echo
json_encode
([
"msg"
=>
'ok'
]);
}
else
{
echo
json_encode
([
"msg"
=>
'no'
]);
$conn
->
close
();
这是原生PHP使用的一个方式,我PHP的话只会一个 ThinkPHP 框架,这边我测试的话 ThinkPHP 使用起来跟这个也是差不多的,至于有些其他的php框架的话我没有用过,但是基本都差不多。现在前后端分离占主导地位,对于一些做后台的兄弟们来说,这些批量导入数据的是很常见的,这边就分享一个简单的,对于一些sql语句的话是需要修改的,这里面的sql语句是不安全的,这里提醒一下大家,测试的时候使用这些SQL语句为啥问题,生产环境切记不能这样用。