PHP – 另存为文件(excel)

我有一个Excel的工作下载文件,但首先我想把一个下载窗口popup。现在,它会自动生成而不保存文件窗口。 我怎样才能做到这一点。 请帮帮我。

<html> <head> <script language="javascript"> function download() { window.location='report.xls'; } </script> </head> <body alink="#00FF66" link="#00CC00"> <h1 align="center"><a href="javascript:void(0);" onClick="download();">Download Excel Report</a></h1> <?php require_once("db.php"); require_once("excelwriter.class.php"); $excel=new ExcelWriter("report.xls"); if($excel==false) echo $excel->error; $myArr=array("Model","Code","Desc","Stock Requested","Stock Received", "Diff", "On hand"); $excel->writeLine($myArr); $sql="SELECT allinvty3.*, barcode.* , sample.*, count(barcode.itemcode) as icount from barcode INNER JOIN sample on barcode.itemcode = sample.in_code INNER JOIN allinvty3 on barcode.itemcode = allinvty3.in_code group by barcode.itemcode"; $result = $conn->query($sql); if($sql!=false) { $i=1; while($row = $result->fetch_assoc()) { $myArr=array($row['ecr_desc'],$row['itemcode'], $row['ite_desc'],$row['tqty'],$row['icount'], $row['icount'], $row['icount']); $excel->writeLine($myArr); $i++; } } ?> </body> </html> 

excelwriter.class.php

 <?php /* * Class is used for save the data into microsoft excel format. * It takes data into array or you can write data column vise. */ 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="") { return $this->open($file); } 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>srirmam</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>"); } } ?>