mk-j / PHP_XLSXWriter

Lightweight XLSX Excel Spreadsheet Writer in PHP
MIT License
1.84k stars 663 forks source link

PHP_XLSXWriter and Code Igniter Corrupted Output Excel File #317

Closed adiakeka closed 1 year ago

adiakeka commented 2 years ago

I'm trying to integrate [PHP_XLSXWriter] (https://github.com/mk-j/PHP_XLSXWriter) with Code Igniter

Here's my controller source code

`public function ToExcel(){ include_once APPPATH.'/third_party/xlsxwriter.class.php'; $filename = "report-".date('d-m-Y-H-i-s').".xlsx"; header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"'); header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate'); header('Pragma: public');

$styles = array('widths'=>[3,20,30,40], 'font'=>'Arial','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee', 'halign'=>'center', 'border'=>'left,right,top,bottom');
$styles2 = array( ['font'=>'Arial','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee', 'halign'=>'left', 'border'=>'left,right,top,bottom','fill'=>'#ffc'],['fill'=>'#fcf'],['fill'=>'#ccf'],['fill'=>'#cff'],);

$header = array(
'No 1'=>'string',
'No 2'=>'string',
'No 3'=>'string',
'No 4'=>'string',
);

$writer = new XLSXWriter();
$writer->setAuthor('Human');
$writer->writeSheetHeader('Sheet1', $header, $styles);
for($no=1;$no<=10;$no++){
    $writer->writeSheetRow('Sheet1', [$no, $no, $no, $no], $styles2);
}
$writer->writeToStdOut();   

}`

The Excel file are generated and downloaded successfully, but when I try to open it using Ms Excel, it says that the file was corrupted. The problem is, it turned out that there's an empty single line at first row of the generated Excel file

When I delete that empty line, it can be opened without any problem

And also, if I copy that controller code to single php file (without Code Igniter involved), the script and generated Excel file worked like a charm

How do I get rid of that first empty line?

Many thanks for the help

infusion commented 2 years ago

@adiakeka I got the same problem, without Code Igniter. The XLSX is basically a ZIP file, all XML files in it have no newline in my case. Where did you see the empty new line? I would like to patch the library, to get rid of the problem.

gabolander commented 2 years ago

I have the same problem using xlsxwriterplus (using AddImage()) and not using xlsxwriter. WriteToFile and Finalize functions in the two libraries, are a bit different....

PowZone commented 1 year ago

Same issue here

awiater commented 1 year ago

You can use my class which extend Response (DownloadResponse) class from CI4 and it should solve yours issues https://github.com/awiater/emporico/blob/main/DownloadResponse.php

mk-j commented 1 year ago

maybe set display_errors to Off in your php.ini ?