使用 Laravel-Excel 和流的方法导出 Excel

Posted niuben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Laravel-Excel 和流的方法导出 Excel相关的知识,希望对你有一定的参考价值。

1、使用 laravel-excel 扩展包导出

扩展包的 3.0 的版本和 2.0 相比做了很多的改动,个人感觉更容易使用了。扩展包给出了很多基于 query 的导出,视图的导出。下面例子为基于 array 的导出,其他的查看文档即可。

导出类:

use Maatwebsite\Excel\Concerns\FromCollection;
    use Maatwebsite\Excel\Concerns\Exportable;
    use Maatwebsite\Excel\Concerns\WithHeadings;
    class UsersExport implements FromCollection, WithHeadings
    
        use Exportable;

        private $data;
        private $headings;

        //数据注入
        public function __construct($data, $headings)
        
            $this->data = $data;
            $this->headings = $headings;
        

        //实现FromCollection接口
        public function collection()
        
            return collect($this->data);
        

        //实现WithHeadings接口
        public function headings(): array
        
            return $this->headings;
        

    

控制器中导出

namespace App\Http\Controllers;

    use Maatwebsite\Excel\Facades\Excel;
    use App\Exports\UsersExport;
    class UsersController extends Controller
    
        public function export()
        
            $data = [
                [
                    ‘name‘ => ‘cheng‘,
                    ‘email‘ => ‘cheng111‘
                ],
                [
                    ‘name‘ => ‘cheng‘,
                    ‘email‘ => ‘cheng111‘
                ],
            ];

            $headings = [
                ‘name‘,
                ‘email‘
            ];
            return Excel::download(new UsersExport($data, $headings), ‘users.csv‘);

        
    

2、使用流的形式导出

 public function export($params)
        
            set_time_limit(0);

            $columns = [‘字段名‘];

            $fileName = ‘GPS管理明细‘ . ‘.csv‘;
            //设置好告诉浏览器要下载excel文件的headers
            header(‘Content-Description: File Transfer‘);
            header(‘Content-Type: application/vnd.ms-excel‘);
            header(‘Content-Disposition: attachment; filename="‘. $fileName .‘"‘);
            header(‘Expires: 0‘);
            header(‘Cache-Control: must-revalidate‘);
            header(‘Pragma: public‘);

            $fp = fopen(‘php://output‘, ‘a‘);//打开output流
            mb_convert_variables(‘GBK‘, ‘UTF-8‘, $columns);
            fputcsv($fp, $columns);     //将数据格式化为CSV格式并写入到output流中

            $num = $this->getExportNum($params);
            $perSize = 2000;//每次查询的条数
            $pages   = ceil($num / $perSize);

            for($i = 1; $i <= $pages; $i++) 
                $list = $this->getUnitExportData($params, $i, $perSize);

                foreach($list as $item) 
                    $rowData[] = $this->switchDeviceMakerToDesc($item[‘device_maker‘]);
                    .
                    .
                    .
                    mb_convert_variables(‘GBK‘, ‘UTF-8‘, $rowData);
                    fputcsv($fp, $rowData);
                    unset($rowData);
                
                unset($accessLog);//释放变量的内存

                ob_flush();     //刷新输出缓冲到浏览器
                flush();        //必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
            
            fclose($fp);
            exit();
        

 

以上是关于使用 Laravel-Excel 和流的方法导出 Excel的主要内容,如果未能解决你的问题,请参考以下文章

laravel-excel导入导出

使用带有 Kotlin 和流的 Android 上的 Apollo 订阅 GraphQL 时处理网络错误

Kafka - 带有批处理数据和流的事件之间的区别

用于列表和流的 memq

Flutter 中 StreamBuilder 和流的问题(接收重复数据)

java_io_FileOutStream和流的分类