一、phpexcel导入数据的准备工作
PHPExcel是一款非常强大的PHP操作EXCEL库,使用PHPExcel可以帮助我们简单、高效实现从Excel读取Excel的数据和导出数据到Excel。在使用phpexcel导入大量数据之前,需要先做好准备工作。
首先,需要安装phpexcel库。可以使用composer进行安装,也可以直接下载源码。
其次,需要准备好导入的数据。常见的数据格式有Excel、CSV等。在本文中,我们以Excel格式为例。
最后,确定数据存储的位置和格式。可以将数据导入到MySQL数据库中,也可以存储在其他存储介质中。
二、使用phpexcel导入Excel数据
使用phpexcel导入Excel数据非常简单。下面是一个使用phpexcel导入Excel数据的示例代码:
$inputFileType = 'Excel2007'; //文件类型
$inputFileName = './data/test.xlsx'; //文件路径
$sheetname = 'sheet1'; //sheet名称
$startRow = 2; //从第二行开始
$highestRow = 6; //最高行数
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName); //加载文件
$sheetData = $objPHPExcel->getSheetByName($sheetname)->toArray(null, true, true, true); //获取数据
$data=[];
for ($row = $startRow; $row <= $highestRow; ++$row) {
$rowData = $sheetData[$row];
$data[] = [
'name' => $rowData['A'],
'gender' => $rowData['B'],
'age' => $rowData['C'],
];
}
//存储数据
saveData($data);代码解释:
首先,需要指定要导入的文件类型、文件路径、sheet名称、开始行数和最高行数。
然后,通过`load`方法加载文件,再通过`getSheetByName`方法获取指定sheet的数据。
使用循环遍历每行数据,并将数据存储在数组中。
最后,调用存储数据的函数,将数据存储起来。
三、使用phpexcel处理大量数据
在使用phpexcel导入大量Excel数据时,需要注意内存使用情况。如果一次性将所有数据加载到内存中,可能会导致内存不足。
针对这个问题,我们可以使用分批处理数据的方式。具体步骤如下:
1. 分批读取Excel数据
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
$sheetData = $objPHPExcel->getSheetByName($sheetname);
//计算最高行数和列数
$highestRow = $sheetData->getHighestRow();
$highestColumn = $sheetData->getHighestColumn();
//按行读取数据
$batchSize = 100; //每批处理100条数据
$currentRow = 2; //从第2行开始
while ($currentRow <= $highestRow) {
$rowData = $sheetData->rangeToArray("A$currentRow:$highestColumn$currentRow", '', true, true, true); //读取一行数据
$data = [
'name' => $rowData[$currentRow]['A'],
'gender' => $rowData[$currentRow]['B'],
'age' => $rowData[$currentRow]['C'],
];
saveData($data); //存储数据
$currentRow++;
if ($currentRow % $batchSize == 2) {
//每处理100条数据,就清空内存
$objPHPExcel->disconnectWorksheets();
unset($objPHPExcel);
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
$sheetData = $objPHPExcel->getSheetByName($sheetname);
}
}代码解释:
首先,我们需要计算最高行数和最高列数,以便后面的数据读取。
在每批处理数据的循环中,使用`rangeToArray`方法读取一行数据,存储在数组中,然后调用存储数据的函数。
每处理完一批数据,就清空内存并重新加载Excel文件,以释放内存空间。
2. 存储数据
存储数据的方式可以是将数据直接存储到MySQL数据库中,也可以存储到文件中。下面是一个将数据存储到MySQL中的示例代码:
function saveData($data) {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare("INSERT INTO users (name,gender,age) VALUES (:name,:gender,:age)");
foreach ($data as $row) {
$stmt->bindParam(':name', $row['name']);
$stmt->bindParam(':gender', $row['gender']);
$stmt->bindParam(':age', $row['age']);
$stmt->execute();
}
}代码解释:
首先,连接到MySQL数据库。
使用预处理语句,将数据插入到`users`表中。
使用循环遍历每行数据,将数据绑定到参数中,并执行SQL语句。
四、phpexcel导入数据时的debug错误处理
在导入大量数据时,可能会发生一些错误。常见的错误包括文件无法打开、文件格式错误、数据解析错误等。
针对这个问题,我们需要对每个步骤都进行错误处理。下面是一个增加错误处理的示例代码:
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
if (!$objPHPExcel) {
echo "导入失败:Excel文件无法打开";
exit;
}
$sheetData = $objPHPExcel->getSheetByName($sheetname);
if (!$sheetData) {
echo "导入失败:sheet不存在";
exit;
}
$highestRow = $sheetData->getHighestRow();
$highestColumn = $sheetData->getHighestColumn();
if ($highestRow < 2 || $highestColumn < 'C') {
echo "导入失败:Excel格式不正确";
exit;
}
$batchSize = 100;
$currentRow = 2;
while ($currentRow <= $highestRow) {
$rowData = $sheetData->rangeToArray("A$currentRow:$highestColumn$currentRow", '', true, true, true);
if (!$rowData) {
echo "导入失败:读取数据失败";
exit;
}
$data = [
'name' => $rowData[$currentRow]['A'],
'gender' => $rowData[$currentRow]['B'],
'age' => $rowData[$currentRow]['C'],
];
if (!$data) {
echo "导入失败:解析数据失败";
exit;
}
saveData($data);
$currentRow++;
if ($currentRow % $batchSize == 2) {
$objPHPExcel->disconnectWorksheets();
unset($objPHPExcel);
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
if (!$objPHPExcel) {
echo "导入失败:Excel文件无法打开";
exit;
}
$sheetData = $objPHPExcel->getSheetByName($sheetname);
if (!$sheetData) {
echo "导入失败:sheet不存在";
exit;
}
}
}代码解释:
在每个步骤后,使用if语句判断是否发生错误,并输出错误信息。如果出现错误,程序立即退出。
五、phpexcel导入大量数据的技术总结
本文介绍了使用phpexcel导入大量数据的方法,包括导入Excel数据、处理大量数据、错误处理等。希望本文能够帮助你快速上手phpexcel导入大量数据。










442956988