够意思博客够意思博客够意思博客

EasySwoole 使用phpoffice/phpspreadsheet导出Csv 10万数据

安装phpoffice/phpspreadsheet

composer require phpoffice/phpspreadsheet

HTTP控制中实现10W条数据导出

/**
* 测试导出10条数据到csv
*/
public function exportCsv(){
   //生成10万条数据
   for($i=0;$i<=100000;$i++){
       $arrData[] = [
           'id' => $i+1,
           'name' => '用户'.($i+1)
       ];
   }
   $title = [['编号', '用户'],];
   $arrData = array_merge($title, $arrData);
   $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
   // 设置单元格格式 可以省略
   $styleArray = ['font' => ['bold' => true, 'size' => 14,],];
   $spreadsheet->getActiveSheet()->getStyle('A1:B1')->applyFromArray($styleArray);
   $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
   $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
   $spreadsheet->getActiveSheet()->fromArray($arrData);
   $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
   $writer->setPreCalculateFormulas(false);
   //这里可以写绝对路径,其他框架到这步就结束了
   $writer->save(EASYSWOOLE_ROOT.'/public/excel/test.xlsx');
   //关闭连接,销毁变量
   $spreadsheet->disconnectWorksheets();
   unset($spreadsheet);
   //生成文件后,使用response输出
   $this->response()->write(file_get_contents(EASYSWOOLE_ROOT.'/public/excel/test.xlsx'));
   $this->response()->withHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
   $this->response()->withHeader('Content-Disposition', 'attachment;filename="test.csv"');
   $this->response()->withHeader('Cache-Control','max-age=0');
   $this->response()->end();
   return false;
}

查看导出结果

编号用户
1用户1
2用户2
3用户3
4用户4
中间省略多行数据...
99997用户99997
99998用户99998
99999用户99999
100000用户100000
100001用户100001

注:

1.数据量大的时候不建议使用xlsx或xls导出表格(超过万条建议使用csv导出)

2.导出数据量过大时,容易导致内存溢出。(正常业务需求也不会导出如此多的数据,导得出来打开也是个问题)

[DEBUG][ERROR] : [Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes) at file:/www/wwwroot/www.host.com/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php line:391]

可调整php.ini中参数 memory_limit的值,默认128M


本文为够意思原创文章,转载无需和我联系,但请注明来自够意思博客blog.go1s.cn:够意思博客 » EasySwoole 使用phpoffice/phpspreadsheet导出Csv 10万数据

加载中~