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'));
}