PHP_XLSXWriter icon indicating copy to clipboard operation
PHP_XLSXWriter copied to clipboard

PHP_XLSXWriter and Code Igniter Corrupted Output Excel File

Open adiakeka opened this issue 3 years ago • 3 comments

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

adiakeka avatar Dec 30 '21 03:12 adiakeka

您好,我已经收到您的信件,将尽快回复您。

sayid avatar Dec 30 '21 03:12 sayid

@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.

infusion avatar Apr 07 '22 14:04 infusion

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....

gabolander avatar Apr 21 '22 10:04 gabolander

Same issue here

PowZone avatar Sep 29 '22 11:09 PowZone

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

awiater avatar Oct 11 '22 22:10 awiater

maybe set display_errors to Off in your php.ini ?

mk-j avatar May 31 '23 22:05 mk-j