1. 程式人生 > >PHP 將大量資料匯出到 Excel 的方法

PHP 將大量資料匯出到 Excel 的方法

資料量很大時(5萬條以上),用 PHPExcel 匯出 xls 將十分緩慢且佔用很大記憶體,最終造成執行超時或記憶體不足。

可以通過設定 PHP 的執行時間和記憶體限制來阻止錯誤發生,但仍然不能確保匯出完成。

set_time_limit(0);
ini_set("memory_limit","512M");

要徹底解決這個問題可以將資料分批匯出成 CSV 格式的檔案,這種格式簡單匯出快,並且也能用到 Excel 中。
<?php
// 不限制指令碼執行時間以確保匯出完成
set_time_limit(0);
// 輸出Excel檔案頭,可把user.csv換成你要的檔名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="amazon_product_quantity.csv"');
header('Cache-Control: max-age=0');
 
// 從資料庫中獲取資料,為了節省記憶體,不要把資料一次性讀到記憶體,從控制代碼中一行一行讀即可
$sql = 'select * from amazon_product_quantity';
$stmt = mysql_query($sql);
 
// 開啟PHP檔案控制代碼,php://output 表示直接輸出到瀏覽器
$fp = fopen('php://output', 'a');
 
// 輸出Excel列名資訊
$head = array('code', 'sub_code', 'sp_code', 'quantity');
foreach ($head as $i => $v) {
    // CSV的Excel支援GBK編碼,一定要轉換,否則亂碼
    $head[$i] = iconv('utf-8', 'gb2312', $v);
}
 
// 將資料通過fputcsv寫到檔案控制代碼
fputcsv($fp, $head);
 
// 計數器
$cnt = 0;
// 每隔$limit行,重新整理一下輸出buffer,不要太大,也不要太小
$limit = 100000;
 
// 逐行取出資料,不浪費記憶體
while ($row = mysql_fetch_array($stmt,MYSQL_ASSOC)) {
    $cnt ++;
    if ($limit == $cnt) { //重新整理一下輸出buffer,防止由於資料過多造成問題
        ob_flush();
        flush();
        $cnt = 0;
    }
 
    foreach ($row as $i => $v) {
        $row[$i] = iconv('utf-8', 'gb2312', $v);
    }
    fputcsv($fp, $row); 
}
?>


相關推薦

PHP 大量資料匯出Excel方法

資料量很大時(5萬條以上),用 PHPExcel 匯出 xls 將十分緩慢且佔用很大記憶體,最終造成執行超時或記憶體不足。可以通過設定 PHP 的執行時間和記憶體限制來阻止錯誤發生,但仍然不能確保匯出完成。 set_

【python Excel】如何使用python大量資料匯出Excel中的小技巧之二

最近對python的openpyxl 升級到了__version__ = '2.5.4',發現原先的程式碼不能使用,各種報錯之後,然後重新了寫的版本,故分享給各位同仁。如有錯誤,敬請賜教。# coding:utf-8 """ File Name: Excel.py Func

java批量檔案打包成壓縮成zip下載和大量資料匯出excel時的處理方法

對於我們來說,java匯出資料成excel或其他資料檔案,或者下載資源是開發中的家常便飯, 但是在匯出的時候,如果點選一個按鈕匯出幾百萬條資料,如果不作處理的話很可能會出現一系列的問題. 這裡介紹打包成zip壓縮包下載 針對大量資料匯出excel, 這裡有幾種

C#也能動態生成Word文件並填充資料, 匯出EXCEL 方法

        public string CreateWordFile(string CheckedInfo)         ...{             string message = "";             try             ...{                 Ob

NET使用NPOI元件資料匯出Excel-通用方法 【推薦】

一、Excel匯入及匯出問題產生:   從接觸.net到現在一直在維護一個DataTable匯出到Excel的類,時不時還會維護一個匯入類。以下是時不時就會出現的問題: 匯出問題:   如果是asp.net,你得在伺服器端裝Office,幾百M呢,還得及時更新它,以防漏洞,還得設定許可權允許ASP.n

PHP資料匯出excel表的外掛與運用

外掛下載在我的這裡有我已經上傳了,自己下載,遇到問題可以在下方留言, 1、包放在 ThinkPHP -> Library -> Vendor; 2、前端:程式碼 <div class="btn-group" style="float: left; mar

PHPExcel之獲取到的資料 匯出excel

tp3.2(注意:project\ThinkPHP\Library\Org\Util\PHPExcel    引用方法: use Org\Util;       ) public function export_nj()

PHP資料匯出Excel

需要將php資料匯出Exel表格中,可以用PHPExcel,但是也有更快的方法,但是會出現些小問題 比如: /* *處理Excel匯出 *@param $datas array 設定表格資料 *@param $titlename string 設定head *@param

js 實現純前端資料匯出excel。chome瀏覽器 親測有效。

有了新的需求 所以就瞭解下怎麼用js 直接匯出excel文件。 html程式碼 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" cont

一個php檔案就可以把資料庫的資料匯出Excel表格

資料庫內容太多,複製貼上太麻煩?那就用程式碼實現把,把程式碼寫好了,匯出還不容易嗎,訪問即可匯出。 excel.php &lt;?php error_reporting(E_ALL ^ E_DEPRECATED); $localhost = '資料庫地址'; $dbnam

JS Table資料匯出Excel

通過JavaScript方法將table中的資料匯出在excel表中,使用方便,可以直接瀏覽器直接下載所需要的excel表,一般適用於後臺管理的匯出資料需求。 使用方法 1.對table標籤設定id,例如:id=”ta” 2.點選按鈕呼叫 <but

如何table表中的資料匯出excel

所用技術:Mybatis+Springmvc+Spring  例子: @RequestMapping(value = "/sbExport") public void sbcscxInquiry

js 實現純前端資料匯出excel兩種方式,親測有效

由於專案需要,需要在不呼叫後臺介面的情況下,將json資料匯出到excel表格,參考了好多資料以及很多大佬寫的部落格終於實現,相容chrome沒問題,其他還沒有測試過,這邊介紹兩種實現方式,並附上程式碼和gif動圖,博主不才還望輕噴方法一將table標籤,包括tr、td等對j

php匯出excel方法

方法一: //直接用頭部資訊輸出excel格式檔案,內容以表格形式展示。 $filename='orderexcel'; header("Content-type: application/vnd.ms-excel; charset=gbk"); head

ThinkPHP資料匯出Excel表中 4種姿勢呼叫Event事件

<?php namespace Home\Event; class ExportExcelEvent{ /** * @desc 將資料匯出到Excel中 * @param $data array 設定表格資料 * @param $titlename strin

利用DevExpressDataTable資料匯出Excel

方法:根據DataTable列名動態建立GridControl,然後利用GridView匯出Excel,同時還可以匯出其他形式檔案。 using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraEditors; us

JS及POI頁面資料匯出EXCLE檔案的幾種方法

JS實現的三種方法如下: 1、js檔案:exportExcel.js //匯出方法1:把表格中的內容提取出來,利用IE的另存為.csv的格式。 function getXlsFromTbl(inTblId, inTblContainerId, title, rownumb

如何mysql資料匯出excel

方法一 SELECT ... FROM ... WHERE ... INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',' 非常簡單的方法,但很不靈活。需要考慮mysql使用者對資料夾的訪問許可權問題,由於伺服器往往是由運維人員控

excel匯出大量資料-匯出壓縮包

匯出幾萬的資料,放在一個excel檔案可能會超行,而且很多資料放在快取佔用了大量的java記憶體,肯定會溢位,那麼分成幾個excel然後打包再下載就好多了 /** * 匯出專案所有資料 * @param request * @param response *

資料庫資料excel中併發送郵件

我們有個政府專案,程式碼和資料庫都在政府那邊,我就開了一個後門,每天定時將資料庫資料發到我們這邊來,然後定時把這個檔案再刪除掉,在中秋這一天專案經理給我打電話問我說資料庫資料的情況,並且讓我們這邊一個開發人員幫忙統計增量是多少,我就萌生了一個想發,過節都不讓人過好,還想著公司的事情,於是