- Edited
I am using Php spreadsheet library to export the data from mysql table in excel file.
Data is getting correctly exported but the last column width is not the same as previous column
public function actionExport()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet = $spreadsheet->removeSheetByIndex(0);
//Get dates of report which needs to be displayed on each sheets
$sql='SELECT DateofReport from ascteacherreport where UserId=:Id order by DateofReport ASC';
$datesRows = \Yii::$app->db->createCommand($sql)->bindValues([':Id'=>\Yii::$app->user->identity->getonlyid()])
->queryColumn();
// Get times for each date report of user
$sql2 = ''; // contains the query to fetch the time
// Get student details for each time
$sql3 = ''; //contains the sql query to fetch students
$col1=3;
$row = 7;
$column1=2;
//Loop through dates for each sheet
foreach($datesRows as $date)
{
$workSheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, $date);
$spreadsheet->addSheet($workSheet);
$params[':date'] = $date;
// Execute the time query
$timedetails = \Yii::$app->db->createCommand($sql2, $params)->queryAll();
//Loop through each time
foreach($timedetails as $idx => $td){
$row1=9;
$col = $idx +3;
$rowno=9;
foreach ($workSheet->getColumnIterator() as $column) {
$workSheet->getColumnDimension($column->getColumnIndex())->setWidth(28);
}
$workSheet->getCellByColumnAndRow($col, $row)->setValue($td['Time'])->getStyle($col.$row) ->applyFromArray($styleArray); // Print Time
$params1[':Id']=$td['ASCReportDetailsId'];
$StudentDetails=\Yii::$app->db->createCommand($sql3, $params1)->queryAll();
foreach($StudentDetails as $id=>$StudentDetais1) // Print Student details
{
$workSheet->getCellByColumnAndRow($col,$row1++)->setValue($StudentDetais1['StudentName'])->getStyle($col1.$row1)->applyFromArray($styleArray1)->getFont()->setBold(true);
$workSheet->getCellByColumnAndRow($col,$row1++)->setValue($StudentDetais1['Subject'])->getStyle($col1.$row1)->applyFromArray($styleArray1)->getAlignment()->setWrapText(true);
$workSheet->getCellByColumnAndRow($col,$row1++)->setValue($StudentDetais1['Topic'])->getStyle($col1.$row1)->applyFromArray($styleArray1)->getAlignment()->setWrapText(true);
$workSheet->getCellByColumnAndRow($col,$row1++)->setValue($StudentDetais1['Confidence'])->getStyle($col1.$row1)->setQuotePrefix(true)->applyFromArray($styleArray1)->getAlignment()->setHorizontal('left');
$workSheet->getCellByColumnAndRow($column1, $rowno++)->setValue('Student Name')->getStyle($column1.$rowno)->applyFromArray($styleArray1);
$workSheet->getCellByColumnAndRow($column1, $rowno++)->setValue('Subject')->getStyle($column1.$rowno)->applyFromArray($styleArray1);
$workSheet->getCellByColumnAndRow($column1, $rowno++)->setValue('Topic')->getStyle($column1.$rowno)->applyFromArray($styleArray1);
$workSheet->getCellByColumnAndRow($column1, $rowno++)->setValue('Confidence')->getStyle($column1.$rowno)->applyFromArray($styleArray1);
$highestRow = $workSheet->getHighestRow();
$highestColumn = $workSheet->getHighestColumn();
}
$workSheet->getStyle('C9:'.$highestColumn.''.$highestRow)->applyFromArray($styleArray1);
}
}
$writer = new Xlsx($spreadsheet);
ob_start();
$writer->save('php://output');
$writer->save('Report'.'.xlsx');
header('Content-type: application/.xlsx');
header('Content-Disposition: attachment; filename="'.'Report'.'.xlsx"');
}
