How to export and download EXCEL file?

Asked

Viewed 160 times

1

I am generating an EXCEL spreadsheet 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 that the downloaded file.

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();
  • the ideal is to post the code here, because if you lose this url this question becomes useless to other people with the same problem, since the ideal of the community is to help as many people as possible!

  • I can’t even open the link, because it’s from UOL and I have proxy at work.

  • Excuse me. I’ll be editing in a moment.

  • Thank you!!!! =)

  • Thank you! Edited.

  • you want the file to be downloaded right after "$excel->close();"?

  • Yes. In case it is being downloaded to the FTP folder due to Excelwriter function. If it were possible, it would be great not to send it to FTP, but only to download it anyway.

Show 3 more comments

1 answer

1

Let me get this straight:

 $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;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.