ThinkPHP 是一个流行的 PHP 开发框架,提供了丰富的功能和组件,用于快速开发 Web 应用程序。导入 Excel 文件(通常是 .xls
或 .xlsx
格式)是许多应用程序中常见的需求,例如数据导入、批量处理等。
.xls
和 .xlsx
格式的文件导入。原因:通常是由于文件编码不一致导致的。
解决方法:
use think\facade\Lang;
use think\facade\Log;
use think\facade\Filesystem;
// 设置文件编码
$excel = new \PHPExcel();
$excel->setActiveSheetIndex(0);
$excel->getActiveSheet()->setTitle('Sheet1');
// 读取文件
$inputFileName = './excels/example.xls';
try {
$reader = \PHPExcel_IOFactory::createReaderForFile($inputFileName);
$reader->setReadDataOnly(true);
$excel = $reader->load($inputFileName);
} catch (\Exception $e) {
Log::error('读取Excel文件失败: ' . $e->getMessage());
Lang::throwException('读取Excel文件失败');
}
// 处理数据
foreach ($excel->getActiveSheet()->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
foreach ($cellIterator as $cell) {
echo $cell->getValue() . "\t";
}
echo "\n";
}
原因:处理大量数据时,内存和CPU消耗较大。
解决方法:
use think\facade\Log;
use think\facade\Filesystem;
// 分批导入数据
$batchSize = 1000;
$rowCount = 0;
foreach ($excel->getActiveSheet()->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
$rowData = [];
foreach ($cellIterator as $cell) {
$rowData[] = $cell->getValue();
}
// 插入数据库
Db::name('table_name')->insert($rowData);
$rowCount++;
if ($rowCount % $batchSize === 0) {
Db::name('table_name')->commit();
Db::name('table_name')->startTrans();
}
}
Db::name('table_name')->commit();
通过以上方法,可以有效解决导入 Excel 文件时遇到的常见问题,并提高数据处理的效率和稳定性。
领取专属 10元无门槛券
手把手带您无忧上云