php怎麼匯出大量資料的Excel

來源:互聯網
上載者:User

比較常用的是用PHPExcel,1萬左右資料還行,但是資料到達100萬左右,PHPExcel就顯的很無助,搜尋了下比較常用的是使用php的fputcsv,不知道還有什麼辦法能匯出比較大量資料的excle


剛剛測試了下fputcsv,發現全部擠到A中,無法換到B中

2012年9月2日添加
03版的確實是有限制的,格式php的csv的是不是用excel開啟只會出現在A列上面?

2012年9月2日添加
我覺得我非常有必要說下為什麼會有這個需求,一個大點的品牌公司,一年左右的訂單,超過100萬是很正常的,年末的時候他們的業務人員會根據訂單進行各種分析,每個公司的分析角度又是不一樣的,所以把所有訂單匯出來給業務人員是一個最簡單的辦法,為什麼要匯出excle,是因為對於業務人員來說這個是最常用的,你也不可能去協助那麼多家的公司開發這樣那樣的報表。
所以也就有了這個需求,怎麼匯出超過100萬甚至1000萬資料excle的問題

回複內容:

比較常用的是用PHPExcel,1萬左右資料還行,但是資料到達100萬左右,PHPExcel就顯的很無助,搜尋了下比較常用的是使用php的fputcsv,不知道還有什麼辦法能匯出比較大量資料的excle


剛剛測試了下fputcsv,發現全部擠到A中,無法換到B中

2012年9月2日添加
03版的確實是有限制的,格式php的csv的是不是用excel開啟只會出現在A列上面?

2012年9月2日添加
我覺得我非常有必要說下為什麼會有這個需求,一個大點的品牌公司,一年左右的訂單,超過100萬是很正常的,年末的時候他們的業務人員會根據訂單進行各種分析,每個公司的分析角度又是不一樣的,所以把所有訂單匯出來給業務人員是一個最簡單的辦法,為什麼要匯出excle,是因為對於業務人員來說這個是最常用的,你也不可能去協助那麼多家的公司開發這樣那樣的報表。
所以也就有了這個需求,怎麼匯出超過100萬甚至1000萬資料excle的問題

  1. PHP從資料庫分多次讀取100萬行記錄,和分多次將100萬行寫入文字檔都沒問題
  2. Excel可以支援100萬行記錄,Excel 2003最大支援65536行,從2007版開始支援104萬行了,目前2007的盜版應該比較普及了-_-! 問清楚你的客戶是什麼版本。
  3. 你要匯出excel的理由是非常充分和正確的,應該繼續堅持。業務人員最熟悉的就是Excel,實在不熟悉現學現用也比別的快。只是要注意,當資料量達到10萬行這個層級時,Excel的公式填充將會非常非常慢,如果再有LOOKUP()公式,基本上十分鐘內處理CPU滿載進程管理器殺不掉的狀態,這時候其實xampp + phpmyadmin是一個易用性和效能都最平衡的選擇
  4. PHPExcel輸出的是Excel XML格式,有個XML頭和尾,中間是資料Body,需要將100萬行都賦值給一個數組才可以調用PHPExcel->write(),這容易導致PHP執行逾時或者記憶體超限,你不妨調整一下php.ini配置,把逾時時間和記憶體限制都改到很大
  5. 如果是輸出csv格式,那就太簡單了,你的問題可能是沒給欄位內容加引號,加上引號再調用fputcsv試試?其實fputcsv做的事情特別簡單,你甚至可以不管它,自己把CSV檔案的每一行拼接好了之後用file_put_contents寫入

最後給你看一個phpmyadmin匯出的CSV樣本,對照你自己產生的CSV樣本,看看哪裡不一樣。

之前我匯出都是用csv的,如果putcsv有問題,你可以嘗試自己去拼裝csv的檔案。csv的格式非常簡單,就是英文逗號分隔。
看你,有可能是首行留空造成的問題,建議修改試試。
---
還有一個辦法,就是用 \t 分割,存成文字檔,然後複製黏貼到excel裡

很贊同2樓的說法。
excel本身就不是為大資料而操作的,如果你真的過10萬行,你還是不要用excel來操作了,這樣真的會死人的。
當然如果你真的要操作,你還是存到access中。然後用excel來讀取access的資料來產生各種圖表(如果你的excel是為了要用來組建圖表的話)。
否則,真沒意義啊。

如果我沒記錯的話,Excel極限是65536條。

1.Excel本身就不能裝幾百萬資料。Excel是有條數限制的。具體多少條你可以查閱相關資料。
2.你可以將資料按照條數進行分割寫入不同的Excel檔案。產生多個。
3.即使你寫入csv檔案,你想用Excel開啟幾百萬資料也不太現實

excel分列就好了

可以csv , 不段的重新整理緩衝期,來實現大資料流的匯出

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

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

$filename='./file.csv';$handle=fopen($filename,"w");fwrite($handle,chr(255).chr(254));fwrite($handle,iconv("UTF-8","UTF-16LE","值1\t值2\t值3\t值n\\r\n"));fclose($handle);

用這個看下,別一下查詢出全部資料,你可以參考下mysql_unbuffered_query

03版的確實是有限制的,格式php的csv的是不是用excel開啟只會出現在A列上面?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.