1 year ago

#245540

test-img

tuberider

PHPExcel corrupt file in MS Office Excel 2016

I know PHPExcel is deprecated and replaced with PHPSpreadsheet. I am planning to migrate in the near future but would like to address this problem anyway. When using MS Office 2016 Office Excel on a Windows 10 Pro environment I get this message:

We found a problem with some content in 'Myfile.xlsx'. Do you want us to try to recover as much as we can?

Click Yes

Microsoft Excel was attempting to open and repair the file. To start this process again, choose Open and Repair from the Open file dialog.

Code works fine using LibreOffice. Also if I open the file in LibreOffice and save it with a different filename then it opens fine in MS Excel. Below is my code snippet, is there anything in this code that would cause this to happen.

Thank you

$filename = "Myfile.xlsx";
$objWriter = PHPExcel_IOFactory::createWriter($this->excel, "Excel2007");

header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
header('Content-Disposition: attachment;filename="'.$filename.'"');
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->save('php://output');

Edit: Snippet how rows and columns are built

if($data_type=="float" || $data_type=="decimal" || $data_type=="numeric"){
            $this->excel->getActiveSheet()
                        ->getStyle($cell)
                        ->getAlignment()
                        ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $this->excel->getActiveSheet()
                        ->setCellValueExplicit($cell, $this_val, PHPExcel_Cell_DataType::TYPE_NUMERIC);
}
else{
            $this->excel->getActiveSheet()
                        ->setCellValueExplicit($cell, $this_val, PHPExcel_Cell_DataType::TYPE_STRING);
}

If I change from XLSX to XLS

From this

$filename = "Myfile.xlsx";
$objWriter = PHPExcel_IOFactory::createWriter($this->excel, "Excel2007");

To this

$filename = "Myfile.xls";
$objWriter = PHPExcel_IOFactory::createWriter($this->excel, "Excel5");

It works ok. It only fails if using Excel2007

php

phpexcel

0 Answers

Your Answer

Accepted video resources