当前位置: 首页 > 后端技术 > PHP

从php导出大量数据到Excel是一个很常见的问题

时间:2023-03-29 16:58:32 PHP

Exporttoexcelwithlargedata.这是一个解决方案。使用的技术有yii2、phpspreadsheet、zip。任务拆分第一步是任务拆分,将一个导出任务拆分成n个来处理最终导出的n个excel文件。应该强调数据批量获取的步骤。即使拆分任务,从数据库batch中获取拆分数据时,数据量仍然很大。这会导致PHP进程的内存增加。这时候就需要用到构造函数,Iterators来获取数据。Yii2可以直接使用Query查询生成器的each方法来处理。每个都是基于迭代器的实现。each的思想是将查询得到的数据暂时存放在数据库服务器中。迭代器遍历时,从数据库服务器批量拉取结果数据,避免进程内存暴涨问题//splittaskforeach($tasksas$task){$query=Query::find();//遍历迭代器foreach($query->each()as$value){//.//在这里组装数据以创建$spreadsheet//.}未设置($查询);//。//exporthereexcelfile//.}//.//在这里打包所有excel文件//.excelexportresourcerelease创建的表要及时释放,表会占用更多的内存。$spreadsheet=new\PhpOffice\PhpSpreadsheet\Spreadsheet();//.//在这里组装$spreadsheet//.$writer=new\PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);$writer->setPreCalculateFormulas(false);$writer->save("********.xlsx");//释放表格$spreadsheet->disconnectWorksheets();unset($spreadsheet);unset($writer);最后压缩打包所有导出的excel$zip=newZipArchive();if($zip->open('excel.zip',ZipArchive::OVERWRITE)==true){//调用方法在root上操作addFileToZip要打包的目录('excel/',$zip);$zip->close();}unset($zip)