When using PHPExcel, why is the autosize stretching my image?

php, phpexcel

Solution

I had the same problem, and I've found a workaround. Just before rendering document, manually init calculation, read adjusted width of the column, and set it manually.

$sheet = $this->phpExcelObject->getActiveSheet();
$sheet->calculateColumnWidths();
$columnDimension = $sheet->getColumnDimension('B');
$columnDimension->setAutoSize(false)->setWidth($columnDimension->getWidth());

Problem

I am creating a spreadsheet using the PHPExcel Class. I have several columns of data. I am using the autosize method in order to have them take the size of the longest data value in each column. EDIT - Here is my full code to show more details: ``` require_once '../../Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); // Adding values for Header Row $objPHPExcel->getActiveSheet() ->setCellValue('A3', '#') ->setCellValue('B3', 'Name') ->setCellValue('C3', 'Email') ->setCellValue('D3', 'Phone') ->setCellValue('E3', 'Address') ->setCellValue('F3', 'Date Registered'); //Setting column values to the Listers Spreadsheet $counter = 4; $entries_num = 1; //while($listers_export_row = $listers_export_result->fetch_assoc()) { while($listers_export_row = $listers_export_result->fetch(PDO::FETCH_ASSOC)) { //Adding Numbers to Listers Spreadsheet (Column A) $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$counter, $entries_num); //Adding Names to Listers Spreadsheet (Column B) $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$counter, $listers_export_row['first_name'].' '.$listers_export_row['last_name']); //Adding Email to Listers Spreadsheet (Column C) $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C'.$counter, $listers_export_row['email']); //Adding Phone to Listers Spreadsheet (Column D) $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D'.$counter, '('.$listers_export_row['phone_prefix'].')'.$listers_export_row['phone_first'].'-'.$listers_export_row['phone_last']); //Adding Address to Listers Spreadsheet (Column E) $address = $listers_export_row['address']; if($listers_export_row['apt'] != '') { $address .= ' '.$listers_export_row['apt']; } $address .= ', '.$listers_export_row['city'].', '.$listers_export_row['state'].' '.$listers_export_row['zip_1']; $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E'.$counter, $address); //Adding Date Registered to Listers Spreadsheet (Column F) $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F'.$counter, date('m/d/y',$listers_export_row['date_created'])); $counter++; $entries_num++; } // Forces the spreadsheet to take the size of the longest value for ($col = 'A'; $col != 'G'; $col++) { //Runs through all cells between A and E and sets to autosize $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true); } // Add a drawing to the worksheet $objDrawing = new PHPExcel_Worksheet_Drawing(); $objDrawing->setResizeProportional(false); $objDrawing->setName('Logo'); $objDrawing->setDescription('Logo'); $objDrawing->setPath('../images/crl_logo.png'); $objDrawing->setHeight(35); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); // Redirect output to a client’s web browser (Excel5) header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="Accounts - '.date('m.d.y',time()).'.xls"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; ``` This is what is occuring (It should only be as wide as the first column): I have removed the autosize method and it takes the correct size, so I know it is affecting the size of the image. How can I remove the autosize from the image but leave it applied for the columns of data?

Original source

Related problems