工作中常常有批量导入数据的需求,方法太多,掌握一个简单实用的足够了.下面为大家介绍一个好用的方法.
数据导入必须按照指定的格式系统方能识别,因此可两个大的步骤:一.导入模板下载 二.数据导入
一.模板下载 (创建export.php文件,存放模板代码)
1.下载导入PHPExcel库
点击连接,进入下载界面.
下载完毕,解压并记下文件路径.
将类导入程序中:
//1.导入PHPExcel库(引入文件路径)
include './PHPExcel_1.8.0_doc/Classes/PHPExcel.php';
//创建对象
$objPHPExcel = new PHPExcel();
//设置属性
$objPHPExcel->getProperties()
->setCreator("WOLF")
->setLastModifiedBy("WOLF")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
2.生成模板表头信息
//2.填充表头
$objActSheet = $objPHPExcel->setActiveSheetIndex(0);
$objActSheet->setCellValue('A1','姓名');
$objActSheet->setCellValue('B1','年龄');
$objActSheet->setCellValue('C1','薪水');
3.生成模板
//3.生成excel表
$objPHPExcel->getActiveSheet()->setTitle('导入模板');
$objPHPExcel->setActiveSheetIndex(0);
$day = date("m-d");
$filename = $day.'导入模板.xls';
ob_end_clean();//清除缓冲区,避免乱码
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header('Content-Disposition: attachment;filename='.$filename);
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');
$objWriter->save('php://output');
exit;
二.导入数据
1.创建前端文件(这里取名inport.php)
inport.php文件分两部分,html文件用于展示导入文件和模板下载操作界面,如下:
Title
";
}else{
echo "";
}
//有插入失败时,输出错误信息
if(isset($errors[0])){
echo "$errors[0]";
}else{
foreach($errors as $linenumber => $errmsg){
if($errmsg){
echo "第 $linenumber 行:$errmsg
";
}
}
}
//没有错误信息时,提示成功
if(count($errors)==0 && isset($_SESSION['error'])){
echo "全部插入成功!";
}
echo "";
//销毁session
unset($_SESSION['error']);
?>
2.创建后台解析文件(import.php)
思路: 接收提交的excel文件逐行进行解析,有问题的行记录存放在error数组中不进行数据更新.没有问题的更新数据库
解析完成后,将error数据存放在session中,跳转到原界面进行提示更新结果.
程序流程:
a.连接数据库 b.判断是否为excel类文件,是则进行解析 c.开始逐行解析,对每个字段加以判断内容是否合格,将错误信息存放数组
e.更新数据库 f.解析完毕,跳转回原界面
$conn=new mysqli("localhost","root","root","myDBPDO");
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
if (isset($_FILES['xls'])) {
set_time_limit(0);
ini_set('memory_limit', '1024M');
//导入PHPExcel库
include './PHPExcel_1.8.0_doc/Classes/PHPExcel.php';
//获取导入文件名,并加以判断是否为excel文件
$xls = $_FILES['xls']['tmp_name'];
$name = $_FILES['xls']['name'];
$name = explode('.', $name);
//新建二维数组,用于存放错误信息,存放在session中传到前端提示
$errors = array();
//若文件格式为xls,xlsx,cvs时,进行解析
if ($xls AND ($name[1] == 'xls' OR $name[1] == 'xlsx' OR $name[1] == 'cvs')) {
$objReader = PHPExcel_IOFactory::load($xls);
$objReader = $objReader->getSheet(0);
$rows = $objReader->getHighestRow();
//若文件有内容,则读取
if($rows > 1){
for($i = 2;$i <= $rows;$i ++){
$name = trim($objReader->getCell('A'.$i)->getValue());
$age = trim($objReader->getCell('B'.$i)->getValue());
$salary = trim($objReader->getCell('C'.$i)->getValue());
//遇到空白行,跳出本次循环
if($name=='' && $age=='' && $salary==''){
continue;
}
//保存错误信息
if(empty($name)){
$errors["$i"] = '姓名必须填';
}
if(empty($age)){
$errors["$i"] = '年龄必须填';
}
if(empty($salary)){
$errors["$i"] = '薪水必须填';
}
if (empty($errors["$i"])) {
unset($errors["$i"]);
// 更新emp表
$sql="insert into emp (name,salary,age) values ('$name',$salary,$age)";
$result=$conn->query($sql);
}
unset($name);
unset($age);
unset($salary);
}
//文件没有内容
}else{
$errors[0] = '请从表格第2行开始填写正确的数据';
}
//不是excel类文件
}else{
$errors[0] = '请选择EXCEL文件';
}
session_start(); // 首先开启session
$_SESSION['error'] = $errors; // 把error存在$_SESSION['error'] 里面
header("Location:./adds.php"); //跳回页面
}
每150行或200行更新一次数据库,
insert into emp (name,salary,age) values ('$name1',$salary1,$age1),('$name2',$salary2,$age2)......
可以大幅度提高效率.