首页 > 技术文章 > laravel-phpspreadsheet 导入导出

mengwangchuan 2019-03-26 15:02 原文

        之前的excel导入导出用的是 Maatwebsite\Excel ,实际内部调用的还是 PhpOffice\PhpSpreadsheet。并且可用方法太少了,如果导入大量数据,即使使用队列,在初次拉取数据的时候可能会超出内存限制报错。还不如直接使用PhpSpreadsheet。

        官方文档: https://phpspreadsheet.readthedocs.io/en/latest/

        相关代码

$file = base_path('storage/app/public/'.$curfile);       // 保存或生成文件完整路径
if(file_exist($file)){
    $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file);//如果文件存在则直接载入
    $sheet = $spreadsheet->getActiveSheet();//获取活动的工作sheet
}else{
    $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();//文件不存在则实例化一个新的文件
    $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 \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save($file);//写入excel文件并保存

// ....执行其他代码
// 更新导出记录表
// 如果是大量数据,则可以通过递归,再创建新队列,记录写入数据

大致代码如上。更多方法查看文档

 

推荐阅读