Satish Saini
Satish Saini

Reputation: 2968

PHPExcel is not generating correct xls file

I am using PHPExcel in my project to generate a xls file of data coming from the database. I have downloaded the library of PHPExcel and using it in my PHP class as give below :

Class name : A.class.php
Path : inside a folder named "inc";
PHPExcel Lib folder : inside "inc" and relative to A.class.php


class A{

        // code stuff

        public function phpexcelgenerate()
        {
        require_once 'PHPExcel_1.7.9_doc/Classes/PHPExcel.php';
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="sam.xlsx"');
        header('Cache-Control: max-age=0');              
        $objPHPExcel = new PHPExcel;
        $objPHPExcel->setActiveSheetIndex(0);
        $objPHPExcel->getActiveSheet()->SetCellValue('A1', "12");

        $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  
        // This line will force the file to download    
        $writer->save();
        }
        // code stuff
        }

This code is generating a xls file but that file is fully empty. I am thinking that I have included the files of PHPExcel in a wrong way in PHP classes. Could anyone tell me where I am doing wrong OR an example how can I do the same ?

Upvotes: 1

Views: 8167

Answers (2)

ali panahi
ali panahi

Reputation: 78

first of all you need to read the file:

    // Read the file
    $objReader = PHPExcel_IOFactory::createReader(Excel5);
    $objPHPExcel = $objReader->load($fileName);

now get the data from db:

    //get data
    $details = $this->main_model->get_details()->row();

then assign the data to correct cells:

    $objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $i);
    $objPHPExcel->getActiveSheet()->setCellValue('B'.$row, $rec->eType);

at the end write the new file:

    header('Content-Type: application/vnd.ms-excel'); //mime type
    header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
    header('Cache-Control: max-age=0'); //no cache

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  
    //force user to download the Excel file without writing it to server's HD
    $objWriter->save('php://output');

Upvotes: 2

DevZer0
DevZer0

Reputation: 13535

You need to pass a filename to the save() method. Then read the contents of that files and echo to the browser.

$writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  
$writer->save("excel.xls");
readfile("excel.xls");

Upvotes: 3

Related Questions