老話題了.PHP匯出EXCEL,phpexcel類很強大,但是效率低速度慢,fputcsv速度快但不知道怎麼解決科學計數法的問題,求老司機傳授經驗

來源:互聯網
上載者:User
如題...

匯出的資料目前大約4W條 下個月可能有10W條 4W條的情況下最終匯出大約20M 因為欄位較多所以迴圈對每一條資料做了一些處理計算, 用PHPEXCEL匯出大概3分鐘出結果 用php內建的fputcsv大約1分鐘出結果,但是因為有身份證和其他超長數字欄位, 又會變成科學計數法

用FPUTCSV的時候給每個欄位加上\t 可以避免科學計數法 但是在csv檔案中每個欄位都隱藏了雙引號 客戶無法接受

用PHPEXCEL可以指定某欄位為文字格式設定 但匯出時間太久 客戶也無法接受

目前程式迴圈本身已儘可能最佳化, 就是匯出這裡沒有辦法 希望在以下兩個方向的任意一個得到協助

1. 最佳化或者簡化PHPEXCEL的使用,使其在能滿足以上功能的情況下儘可能提高效率

2. 匯出CSV可以使長數字不以科學計數法的形式顯示,或者指定該列儲存格格式為文本

有有效思路亦可 不勝感激


回複討論(解決方案)

最佳化的一種方法:
http://bbs.youyax.com/Content-5058
假設有10000條資料,
分10次匯出,每次匯出1000條,
這種方法的好處是,可以避免長時間等待,
但是有個問題是好像還是很佔用記憶體,
檔案太大依然會報記憶體不足
原理是:
先匯出1000條,
再次讀取,定位到第1001行,
繼續匯出下1000條,
再次讀取,定位到2001,
……

最佳化的一種方法:
http://bbs.youyax.com/Content-5058
假設有10000條資料,
分10次匯出,每次匯出1000條,
這種方法的好處是,可以避免長時間等待,
但是有個問題是好像還是很佔用記憶體,
檔案太大依然會報記憶體不足
原理是:
先匯出1000條,
再次讀取,定位到第1001行,
繼續匯出下1000條,
再次讀取,定位到2001,
……




總耗時如果不減少的話意義不是很大~~


最佳化的一種方法:
http://bbs.youyax.com/Content-5058
假設有10000條資料,
分10次匯出,每次匯出1000條,
這種方法的好處是,可以避免長時間等待,
但是有個問題是好像還是很佔用記憶體,
檔案太大依然會報記憶體不足
原理是:
先匯出1000條,
再次讀取,定位到第1001行,
繼續匯出下1000條,
再次讀取,定位到2001,
……




總耗時如果不減少的話意義不是很大~~


把你的方法或代碼貼出來看看,研究研究,口說有點不清晰

1.Excel可以支援100萬行記錄,Excel 2003最大支援65536行,從2007版開始支援104萬行,Excel極限是65536條。

參考下:迴圈產生CSV 資料, 每產生1000 條的時候重新整理下緩衝期

$fp = fopen('php://output', 'a');// 輸出Excel列名資訊$head = array("電子郵件");foreach ($head as $i => $v) {    // CSV的Excel支援GBK編碼,一定要轉換,否則亂碼    $head[$i] = iconv('utf-8', 'gbk', $v);}// 將資料通過fputcsv寫到檔案控制代碼fputcsv($fp, $head);// 計數器$cnt = 0;// 每隔$limit行,重新整理一下輸出buffer,不要太大,也不要太小$limit = 100000;// 逐行取出資料,不浪費記憶體$count = count($email);for($t=0;$t<$count;$t++) {    $cnt ++;    if ($limit == $cnt) { //重新整理一下輸出buffer,防止由於資料過多造成問題        ob_flush();        flush();        $cnt = 0;    }    $row[] = $email[$t];    foreach ($row as $i => $v) {        $row[$i] = iconv('utf-8', 'gbk', $v);    }    fputcsv($fp, $row);    unset($row);}2.長數字,可以再匯出的時候,在前面預加個空格,這個就不以長度計數形式匯出,而是以文本形式匯出。

目前尚無很好的辦法, PHPexcel總是很慢 未能成功最佳化

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.