关于php-excel的使用方案及注意事项

        平时我们使用的excel类库主要有PHPExcel和PhpSpreadsheet,在数据量较小的情况下,性能和可靠性还能接受,不过,随着数据量越来越大,经常会遇到很多问题,这次我便来谈一下对于这些问题的看法及解决方案。

问题一:读取excel文件的时候,出现超出内存上限,内存太大。

这种情况最直接的解决方法就是修改内存的上限大小,代码:

<?php
//ini_set('memory_limit','1024M'); // 限制上限内存1024MB
//ini_set('memory_limit','-1');  // 不限制内存上限,不推荐

上述方法只能临时解决问题,随着数据变得更大,又得改上限大小,不是长久之计。于是,我找到了个单独的类库(nuovo/spreadsheet-reader),有点小问题,我重新调整了一下。https://download.csdn.net/download/thegoodboy1234/85022905

工具的使用例子 

<?php
require_once 'SpreadsheetReader/SpreadsheetReader.php';
$Reader = new \SpreadsheetReader('test.xlsx');
$Sheets = $Reader -> Sheets();
foreach ($Sheets as $Index => $Name)
{
    echo 'Sheet #'.$Index.': '.$Name;

    $Reader -> ChangeSheet($Index);

    foreach ($Reader as $Row)
    {
        print_r($Row);
    }
}

 问题二:导出文件的时候,效率很低,响应很慢。

<?php
//$type = 'CSV';
$type = 'Excel2007';
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $type);
$objWriter->save('test1.xlsx');
var_dump(round(memory_get_usage()/1024/1024));

通过测试你会发现csv这类纯文本的效率很高,相反xlsx或xls格式则需要相当长的时间,甚至会超出内存上限。所以,建议数据导出的时候,尽可能以csv的格式,才能保证功能的效率及可靠性。另外,在写操作之前,尽可能把数据源unset处理,降低当前进程的内存使用量。

以上是我个人的看法及测试结果,希望大家给予建议和反馈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值