本帖最后由 anyilaoliu 于 2014-08-20 16:39:12 编辑

解决方案 »

  1.   

    优化的一种方法:
    http://bbs.youyax.com/Content-5058
    假设有10000条数据,
    分10次导出,每次导出1000条,
    这种方法的好处是,可以避免长时间等待,
    但是有个问题是好像还是很占用内存,
    文件太大依然会报内存不足
    原理是:
    先导出1000条,
    再次读取,定位到第1001行,
    继续导出下1000条,
    再次读取,定位到2001,
    ……
      

  2.   

    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.长数字,可以再导出的时候,在前面预加个空格,这个就不以长度计数形式导出,而是以文本形式导出。
      

  3.   

    目前尚无很好的办法,  PHPexcel总是很慢 未能成功优化
      

  4.   

    。。我碰到过和你类似的问题,可以很明确的告诉你phpexcel的效率比较低,即使代码做了最好的优化。循环向单元格填数据还好,如果涉及到循环设置样式,那效率就底的吓人了。后来我使用了另一种结合java的方式 ,可以将效率提高10倍以上。如果想深入了解可以+我qq 78938076
      

  5.   

    这个是我生成的excel文件,列行均较多,比phpexcle生成的效率能提高n倍。78938076 联系。