PhpOffice\PhpSpreadsheet的使用

PhpOffice\PhpSpreadsheet是php导出excel表格的插件,以下是简单应用

由于我的项目是laravel项目,所以我以此为例

1、安装插件

在php插件市场里面找到该插件:插件市场地址为:https://packagist.p2hp.com/
在项目根目录终端,注意一定是在项目根目录的终端
使用composer安装插件
执行以下命令行
composer require phpoffice/phpspreadsheet

2、在项目中导入

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;

3、简单的应用

public function exportDetail()
    {
        $user = Auth::user();

        // 注意:这里没有 subject_id,因为会有3个id
        $details = Music::exportAllDetail();


        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        // 设置表格名称
        $sheet->setTitle('*****');

        // 设置默认列宽
        $sheet->getDefaultColumnDimension()->setWidth(20);


        // -------------------  设置标题  ----------------------
        // excel坐标
        $row = 1;       // 行数,从第1行开始
        $column = 1;    // 列数,从第1列开始

        $sheet->setCellValue([$column++,$row], 'ID');
        $sheet->setCellValue([$column++,$row], 'name');
        $sheet->setCellValue([$column++,$row], 'IP');
        $sheet->setCellValue([$column++,$row], 'sex');
        $sheet->setCellValue([$column++,$row], 'birthday');
        $sheet->setCellValue([$column++,$row], 'age');
        $sheet->setCellValue([$column++,$row], 'grade');
        $sheet->setCellValue([$column++,$row], 'unknown');
        $sheet->setCellValue([$column++,$row], 'inducer_type');
        $sheet->setCellValue([$column++,$row], 'inducer_id');
        $sheet->setCellValue([$column++,$row], 'stimulus');
        $sheet->setCellValue([$column++,$row], 'r');
        $sheet->setCellValue([$column++,$row], 'g');
        $sheet->setCellValue([$column++,$row], 'b');
        $sheet->setCellValue([$column++,$row], 'datetimenow');
        $sheet->setCellValue([$column++,$row], 'duration');
        $sheet->setCellValue([$column++,$row], 'color_num');

        // -------------------  输出数据  ----------------------
        // excel坐标
        $row = 2;       // 行数,从第2行开始(第1行已经输出标题)
        $column = 1;    // 列数,从第1列开始

        foreach ($details as $key => $detail){

            // 做题时间,换成毫秒
            $doing_time = (strtotime($detail->finish_time) - strtotime($detail->begin_time)) * 1000;

            // 根据出生日期计算多少岁
            $age = date('Y') - date('Y',strtotime($detail->birthday));

            // RGB的值
            // 先去除 # 号
            $color = str_replace('#','',$detail->value);
            // 分别计算出 RGB 的值
            $red   = hexdec(substr($color,0,2));
            $green = hexdec(substr($color,2,2));
            $blue  = hexdec(substr($color,4,2));

            $sheet->setCellValue([$column++,$row], $detail->id);
            $sheet->setCellValue([$column++,$row], $detail->name);
            $sheet->setCellValue([$column++,$row], $detail->ip);
            $sheet->setCellValue([$column++,$row], $detail->gender);
            $sheet->setCellValue([$column++,$row], $detail->birthday);
            $sheet->setCellValue([$column++,$row], $detail->age);
            $sheet->setCellValue([$column++,$row], $detail->grade);
            $sheet->setCellValue([$column++,$row], $detail->customize);
            $sheet->setCellValue([$column++,$row], $detail->subject_id);
            $sheet->setCellValue([$column++,$row], $detail->subject_id);
            $sheet->setCellValue([$column++,$row], $detail->title);
            $sheet->setCellValue([$column++,$row], $red);
            $sheet->setCellValue([$column++,$row], $green);
            $sheet->setCellValue([$column++,$row], $blue);
            $sheet->setCellValue([$column++,$row], $detail->begin_time);
            $sheet->setCellValue([$column++,$row], $detail->reaction_time);
            $sheet->setCellValue([$column++,$row], $detail->option_id);

            // 输出每一行后,excel坐标复位
            $row++;         // 行数,从下1行开始
            $column = 1;    // 列数,从第1列开始

        }

        $writer = new Xlsx($spreadsheet);
        // 禁止公式计算
        $writer->setPreCalculateFormulas(false);

        $excel_name = uniqid() . '.xlsx';

        $excel_path =  public_path('storage') . DIRECTORY_SEPARATOR . $excel_name;

        $writer->save( $excel_path);

        return view('music.export_msg',compact('user','excel_name'));
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值