一、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导入大量数据。