我的 Excel 导出工作 90%。第一批专栏是直截了当的,取自我的收藏。最后两个字段来自相关模型,我对测试名称和测试分数感兴趣。对于每一行(运动员),有多个测试。我需要运动员所做的每一项测试都成为一个专栏。
我得到了它的工作,但测试分数没有正确对齐。如果运动员 1 进行了测试 A、B 和 C,但运动员 2 只进行了测试 B 和 C,则将运动员 2 的 B 分数放在 A 测试列下。见附图。147.000 的黄色高光应该全部向右移动,最后两行也必须向右移动,3.6 和 3.8 是 20 米冲刺测试的分数。请帮助进行分数对齐。
控制器:
if(count($tests)){
$insert_results = array();
foreach($tests as $key => $t) {
$insert_results[$key]['institution'] = $t->section->institution->name;
$insert_results[$key]['sport'] = $t->section->sport->name;
$insert_results[$key]['sportlevel'] = $t->section->sportlevel->long_name;
$insert_results[$key]['testdate'] = $t->test_date->format('Y-m-d');
$insert_results[$key]['name'] = $t->athlete->name;
$insert_results[$key]['surname'] = $t->athlete->surname;
$insert_results[$key]['ethnicity'] = $t->athlete->race;
$insert_results[$key]['gender'] = $t->athlete->gender;
$insert_results[$key]['age'] = $t->age;
$insert_results[$key]['weight'] = $t->weight;
$insert_results[$key]['height'] = $t->height;
foreach($t->results as $r){
$insert_results[$key]['test'.$r->battery->name] = $r->score;
}
}
$filename = $section_obj->institution->name . '_' . $section_obj->sport->name . '_' . $section_obj->sportlevel->name . '_' . $date;
$sheetname = $section_obj->sport->name . '_' . $section_obj->sportlevel->name;
Excel::create($filename, function($excel) use($insert_results, $sheetname) {
$excel->sheet($sheetname, function($sheet) use($insert_results) {
$sheet->fromArray($insert_results);
// Auto filter for entire sheet
$sheet->setAutoFilter();
// Freeze first row
$sheet->freezeFirstRow();
});
})->export('xlsx');
}else{
return redirect()->back()->with(['fail' => 'No results found for test day '. $date]);
}