之前的excel导入导出用的是 MaatwebsiteExcel ,实际内部调用的还是 PhpOfficePhpSpreadsheet。并且可用方法太少了,如果导入大量数据,即使使用队列,在初次拉取数据的时候可能会超出内存限制报错。还不如直接使用PhpSpreadsheet。
官方文档: https://phpspreadsheet.readthedocs.io/en/latest/
相关代码
$file = base_path('storage/app/public/'.$curfile); // 保存或生成文件完整路径 if(file_exist($file)){ $spreadsheet = PhpOfficePhpSpreadsheetIOFactory::load($file);//如果文件存在则直接载入 $sheet = $spreadsheet->getActiveSheet();//获取活动的工作sheet }else{ $spreadsheet = new PhpOfficePhpSpreadsheetSpreadsheet();//文件不存在则实例化一个新的文件 $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', '订单号');//新文件需要设置头部 $sheet->setCellValue('B1', '支付金额'); $sheet->setCellValue('C1', '购买数量'); $sheet->setCellValue('D1', '单价'); } $row = 1;//记录行数 foreach ($orders as $key => $value) {// 写入数据 $sheet->setCellValue('A'.($row+1), $value->order_id.','); $sheet->setCellValue('B'.($row+1), $order_code.','); $sheet->setCellValue('C'.($row+1), $value->num); $row++; } $writer = new PhpOfficePhpSpreadsheetWriterXlsx($spreadsheet); $writer->save($file);//写入excel文件并保存 // ....执行其他代码 // 更新导出记录表 // 如果是大量数据,则可以通过递归,再创建新队列,记录写入数据
大致代码如上。更多方法查看文档