How to export and download file in EXCEL?

1

I'm generating an EXCEL worksheet through a function Function , everything is done correctly. The file is generated in the root folder of my application, however, I would like to know if it is possible to download the generated file when clicking.

If any information is missing, please advise.

FUNCTION

Class ExcelWriter {

var $fp = null;
var $error;
var $state = "CLOSED";
var $newRow = false;

/*
 * @Params : $file  : file name of excel file to be created.
 * @Return : On Success Valid File Pointer to file
 *             On Failure return false
 */

function ExcelWriter($file = "", $bsc = "CELLPAR") {
    return $this->open($file);
}

/*
 * @Params : $file  : file name of excel file to be created.
 *                if you are using file name with directory i.e. test/myFile.xls
 *                then the directory must be existed on the system and have permissioned properly
 *                to write the file.
 * @Return : On Success Valid File Pointer to file
 *                On Failure return false
 */

function open($file) {
    if ($this->state != "CLOSED") {
        $this->error = "Error : Another file is opend .Close it to save the file";
        return false;
    }

    if (!empty($file)) {
        $this->fp = @fopen($file, "w+");
    } else {
        $this->error = "Usage : New ExcelWriter('fileName')";
        return false;
    }

    if ($this->fp == false) {
        $this->error = "Error: Unable to open/create File.You may not have permmsion to write the file.";
        return false;
    }
    $this->state = "OPENED";
    fwrite($this->fp, $this->GetHeader());
    return $this->fp;
}

function close() {
    if ($this->state != "OPENED") {
        $this->error = "Error : Please open the file.";
        return false;
    }
    if ($this->newRow) {
        fwrite($this->fp, "</tr>");
        $this->newRow = false;
    }
    fwrite($this->fp, $this->GetFooter());
    fclose($this->fp);
    $this->state = "CLOSED";
    return;
}

/* @Params : Void
 *  @return : Void
 * This function write the header of Excel file.
 */

function GetHeader() {
    $header = <<<EOH
    <html xmlns:o="urn:schemas-microsoft-com:office:office"
           xmlns:x="urn:schemas-microsoft-com:office:excel"
            xmlns="http://www.w3.org/TR/REC-html40">

            <head>
            <meta http-equiv=Content-Type content="text/html; charset=us-ascii">
            <meta name=ProgId content=Excel.Sheet>
            <!--[if gte mso 9]><xml>
             <o:DocumentProperties>
              <o:LastAuthor>Sriram</o:LastAuthor>
              <o:LastSaved>2005-01-02T07:46:23Z</o:LastSaved>
              <o:Version>10.2625</o:Version>
             </o:DocumentProperties>
             <o:OfficeDocumentSettings>
              <o:DownloadComponents/>
             </o:OfficeDocumentSettings>
            </xml><![endif]-->
            <style>
            <!--table
                {mso-displayed-decimal-separator:"\.";
                mso-displayed-thousand-separator:"\,";}
            @page
                {margin:1.0in .75in 1.0in .75in;
                mso-header-margin:.5in;
                mso-footer-margin:.5in;}
            tr
                {mso-height-source:auto;}
            col
                {mso-width-source:auto;}
            br
                {mso-data-placement:same-cell;}
            .style0
                {mso-number-format:General;
                text-align:general;
                vertical-align:bottom;
                white-space:nowrap;
                mso-rotate:0;
                mso-background-source:auto;
                mso-pattern:auto;
                color:windowtext;
                font-size:10.0pt;
                font-weight:400;
                font-style:normal;
                text-decoration:none;
                font-family:Arial;
                mso-generic-font-family:auto;
                mso-font-charset:0;
                border:none;
                mso-protection:locked visible;
                mso-style-name:Normal;
                mso-style-id:0;}
            td
                {mso-style-parent:style0;
                padding-top:1px;
                padding-right:1px;
                padding-left:1px;
                mso-ignore:padding;
                color:windowtext;
                font-size:10.0pt;
                font-weight:400;
                font-style:normal;
                text-decoration:none;
                font-family:Arial;
                mso-generic-font-family:auto;
                mso-font-charset:0;
                mso-number-format:General;
                text-align:general;
                vertical-align:bottom;
                border:none;
                mso-background-source:auto;
                mso-pattern:auto;
                mso-protection:locked visible;
                white-space:nowrap;
                mso-rotate:0;}
            .xl24
                {mso-style-parent:style0;
                white-space:normal;}
            -->
            </style>
            <!--[if gte mso 9]><xml>
             <x:ExcelWorkbook>
              <x:ExcelWorksheets>
               <x:ExcelWorksheet>
                <x:Name>NOME_PLANILHA</x:Name>
                <x:WorksheetOptions>
                 <x:Selected/>
                 <x:ProtectContents>False</x:ProtectContents>
                 <x:ProtectObjects>False</x:ProtectObjects>
                 <x:ProtectScenarios>False</x:ProtectScenarios>
                </x:WorksheetOptions>
               </x:ExcelWorksheet>
              </x:ExcelWorksheets>
              <x:WindowHeight>10005</x:WindowHeight>
              <x:WindowWidth>10005</x:WindowWidth>
              <x:WindowTopX>120</x:WindowTopX>
              <x:WindowTopY>135</x:WindowTopY>
              <x:ProtectStructure>False</x:ProtectStructure>
              <x:ProtectWindows>False</x:ProtectWindows>
             </x:ExcelWorkbook>
            </xml><![endif]-->
            </head>

            <body link=blue vlink=purple>
            <table x:str border=0 cellpadding=0 cellspacing=0 style='border-collapse: collapse;table-layout:fixed;'>
EOH;
        return $header;
    }

function GetFooter() {
    return "</table></body></html>";
}

/*
 * @Params : $line_arr: An valid array
 * @Return : Void
 */

function writeLine($line_arr) {
    if ($this->state != "OPENED") {
        $this->error = "Error : Please open the file.";
        return false;
    }
    if (!is_array($line_arr)) {
        $this->error = "Error : Argument is not valid. Supply an valid Array.";
        return false;
    }
    fwrite($this->fp, "<tr>");
    foreach ($line_arr as $col)
        fwrite($this->fp, "<td class=xl24 width=64 >$col</td>");
    fwrite($this->fp, "</tr>");
}

/*
 * @Params : Void
 * @Return : Void
 */

function writeRow() {
    if ($this->state != "OPENED") {
        $this->error = "Error : Please open the file.";
        return false;
    }
    if ($this->newRow == false) {
        fwrite($this->fp, "<tr>");
    } else {
        fwrite($this->fp, "</tr><tr>");
        $this->newRow = true;
    }
}

/*
 * @Params : $value : Coloumn Value
 * @Return : Void
 */

function writeCol($value) {
    if ($this->state != "OPENED") {
        $this->error = "Error : Please open the file.";
        return false;
    }
    fwrite($this->fp, "<td class=xl24 width=64 >$value</td>");
}

}

LINK PARA EXPORTACAO:
<a href=\"?exportaSimulacao\" title=\"Exportar simulações\" onclick=\"return confirm('Deseja realmente exportar as simulações?')\" class=\"btn btn-info\">Exportar simulações</a>"

EXECUTION CODE

 $excel = new ExcelWriter('excel.xls');
if ($excel == false) {
    echo $excel->error;
}
$myArr = array('NOME', 'EMAIL', 'TELEFONE', 'ACERTOS');
$excel->writeLine($myArr);

$listaSimulacao = new Read;
$listaSimulacao->FullRead("SELECT * FROM ang_simulacao");

foreach ($listaSimulacao->getResult() as $key => $simulacao):
    extract($simulacao);
    $myArr = array($simulacao_nome, $simulacao_email, $simulacao_telefone, $simulacao_acertos);
    $excel->writeLine($myArr);
endforeach;

$excel->close();
    
asked by anonymous 08.09.2016 / 19:57

1 answer

1

Let's see if I get it right:

 $file_path = 'excel.xls';
 $excel = new ExcelWriter($file_path);
 if ($excel == false) {
     echo $excel->error;
 }
 $myArr = array('NOME', 'EMAIL', 'TELEFONE', 'ACERTOS');
 $excel->writeLine($myArr);

 $listaSimulacao = new Read;
 $listaSimulacao->FullRead("SELECT * FROM ang_simulacao");

 foreach ($listaSimulacao->getResult() as $key => $simulacao):
     extract($simulacao);
     $myArr = array($simulacao_nome, $simulacao_email, $simulacao_telefone, $simulacao_acertos);
     $excel->writeLine($myArr);
 endforeach;

 $excel->close();

 header('Content-Type: application/octet-stream');
 header('Content-Disposition: attachment; "' . $file_path . '"');
 header('Pragma: no-cache');
 readfile($file_path);
 exit;
    
08.09.2016 / 20:32