PHP寫的從數據庫導入到EXCEL
原理: 就是原理很分頁原理一樣! 選取一定數量的數據然后變成數組,接著直接寫入文件。接下來繼續選取后面沒選定數據在變成數組,接著在寫入文件!這個解決了內存溢出。但是多CPU還是有個考驗! 由于本人剛剛學PHP(PHP培訓 php教程 )不久,功力不深厚!只能寫出這樣的東西!
源碼!
Excel類
PHP code class Excel{ var $header = "<?xml version="1.0" encoding="utf-8"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">"; var $footer = "</Workbook>"; var $lines = array (); var $worksheet_title = "Table1"; function addRow ($array) { $cells = ""; foreach ($array as $k => $v): if(is_numeric($v)) { if(substr($v, 0, 1) == 0) { $cells .= "<Cell><Data ss:Type="String">" . $v . "</Data></Cell>n"; } else { $cells .= "<Cell><Data ss:Type="Number">" . $v . "</Data></Cell>n"; } } else { $cells .= "<Cell><Data ss:Type="String">" . $v . "</Data></Cell>n"; } endforeach; $this->lines[] = "<Row>n" . $cells . "</Row>n"; unset($arry); } function setWorksheetTitle ($title) { $title = preg_replace ("/[\|:|/|?|*|[|]]/", "", $title); $title = substr ($title, 0, 31); $this->worksheet_title = $title; } function generateXML ($filename) { // deliver header (as recommended in PHP manual) header("Content-Type: application/vnd.ms-excel; charset=utf-8"); header("Content-Disposition: inline; filename="" . $filename . ".xls""); // print out document to the browser // need to use stripslashes for the damn ">" echo stripslashes ($this->header); echo "n<Worksheet ss:Name="" . $this->worksheet_title . "">n<Table>n"; echo "<Column ss:Index="1" ss:AutoFitWidth="0" ss:Width="110"/>n"; echo implode ("n", $this->lines); echo "</Table>n</Worksheet>n"; echo $this->footer; exit; } function write ($filename) // 重點 { $content= stripslashes ($this->header); $content.= "n<Worksheet ss:Name="" . $this->worksheet_title . "">n<Table>n"; $content.= "<Column ss:Index="1" ss:AutoFitWidth="0" ss:Width="110"/>n"; $content.= implode ("n", $this->lines); $content.= "</Table>n</Worksheet>n"; $content.= $this->footer;//EXCEL文件 //error_log($content, 3,$filename); if (!file_exists($filename))//判斷有沒有文件 { fopen($filename,'a'); } $fp = fopen($filename,'a'); fwrite($fp, $content);//寫入文件 fclose($fp); unset($this->lines);//清空內存中的數據 } } |
頁面
PHPcode include_once"./include/class.excel.PHP";//調用EXCEL類 require_once'./include/class.zipfile.PHP';//調用大包類 $xls=newExcel;//實例化 $w=explode("limit",$where_str);//把WHERE $p=6000;//分頁原理 $a=$ip_list_count/$p;//分頁原理 if($ip_list_count%$p==0)//分頁原理 else//分頁原理 for($i=0;$i<=$a;$i++)//循環寫出 { $s=6000*$i; $ip=$_SG['db']->fetch_all("select*frommain_info".$w[0]."limit".$s.",".$p);//調用自己寫的數據庫(數據庫培訓數據庫認證)方法,寫出數組 $xls->addArray($ip);//調用EXCEL類中addArray方法 xml1=$xls->write("./".$i.".xls");//調用EXCEL類中write方法 unset($ip); unset($xml1); sleep(1); } |
posted on 2014-11-26 15:08 順其自然EVO 閱讀(471) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄 、數據庫