What I am looking to reach is to have an excel document showing 3 columns and in the last one a list of images.
For example :
Page Title | Questions | Questions Status | Images (1,2,3)
What I've done till now is the following which is returning an empty excel !
$elements = DB::table('tour_manager')
->join('tours', 'tours.id', '=', 'tour_manager.tour_id')
->join('tour_questions', 'tour_questions.id', '=', 'tour_manager.question_id')
->join('tour_pages', 'tour_pages.id', '=', 'tour_questions.page_id')
->join('tour_manager_page_pics', 'tour_manager_page_pics.page_id', '=', 'tour_pages.id')
->where('tour_manager.tour_id', $tour)
->select('tours.status as tour_status', 'tours.pourcentConforme as pc', 'tours.id as tour_id',
'tour_questions.title as question', 'tour_questions.id as question_id',
'tour_manager_page_pics.imagePath1', 'tour_manager_page_pics.imagePath2', 'tour_manager_page_pics.imagePath3',
'tour_pages.title as page', 'tour_pages.id as page_id', 'tour_manager.status as qstatus')
->distinct()
->get();
$fcList = array();
foreach ($elements as $c) {
$fcList[$c->page]['questions'][$c->question] =
$c->question_id;
$fcList[$c->page]['status'][$c->question] =
$c->qstatus;
$fcList[$c->page]['images']['image1'] = $c->imagePath1;
$fcList[$c->page]['images']['image2'] = $c->imagePath2;
$fcList[$c->page]['images']['image3'] = $c->imagePath3;
}
Excel::create('Tour du Manager - Excel', function($excel) use($tour,$fcList) {
$i =1 ;
$j =1 ;
$excel->sheet($tour, function ($sheet) use ($i,$j,$fcList) {
foreach ($fcList as $c) {
foreach ($c as $k=>$t) {
foreach ($t as $m=>$o) {
$k = array($k);
$i = $i + 5;
$j = $j ++;
if ($k == "questions"){
$sheet->cell('A1', function ($cell) use ($o, $m) {
if ($o == 1) $status = "Conforme"; else $status = "Non Conforme";
$cell->setValue($m, $status);
});
}
if ($k == "images"){
$sheet->cell('C1', function ($cell) use ($sheet, $i) {
$objDrawing = new PHPExcel_Worksheet_Drawing;
$objDrawing->setPath(public_path('upload/5-20161128152607.png')); //your image path
$objDrawing->setCoordinates('A' . $i);
$objDrawing->setWorksheet($sheet);
});
}
}
}
}
});
})->export('xls');
redirect ('tours/'.$tour);
The 3 foreach are for accessing the right data (same foreach I used in a view and are showing the right data, I even tested those with dd() and shown right data). AFter that, the counter +5 is to give a space for images (as images are appended above a cell and not into it) so that pages (elements) are not shown one above the other.
Any help and advice are welcome !
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire