使用PHPExcel

时间:2017-03-10 20:31:05

标签: php phpexcel

我目前只想从xslx excel文件中读取数据,只显示数据是我目前正在寻找的,但excel文件总是包含30k +行。我目前的代码如下:

<?php
ini_set('memory_limit', '1024M'); // or you could use 1G
/**
 * PHPExcel
 *
 * Copyright (c) 2017
 *
 * @category   PHPExcel
 * @package    PHPExcel
 * @copyright  Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 * @version    ##VERSION##, ##DATE##
 */

/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('America/Guatemala');

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');

date_default_timezone_set('America/Guatemala');

/** Include PHPExcel_IOFactory */
require_once dirname(__FILE__) . '/phpexcel/PHPExcel/IOFactory.php';

require_once 'phpexcel/PHPExcel.php';
$before = memory_get_usage(true);
$xls_reader = PHPExcel_IOFactory::load('excelfile.xlsx');
$after = memory_get_usage(true);
unset($xls_reader);
printf("usage before loading xlsx file %s\nusage after loading xlsx file %s\ndelta usage %s", $before, $after, $after - $before);

?>

请不要将此问题标记为重复,因为我已经尝试过在以前的问题上发布的每个答案都与此类似,但似乎都没有。

我尝试过使用单元格缓存,同时使用ini_set('memory_limit', '1024M');ini_set('memory_limit', '-1');,我仍然得到完全相同的错误Fatal error: Out of memory (allocated 2097152) (tried to allocate 132604370 bytes) in C:\MAMP\htdocs\dclean\phpexcel\PHPExcel\Reader\Excel2007.php on line 315

将memory_limit更改为1024时,分配的数据量会发生变化,但会显示相同的错误。

我想要实现的只是一种处理excel数据的方法,但目前最大的挑战是能够从excel文件加载30K +行。我目前正在使用PHPExcel,但只要&#34;使用很多行&#34;条件存在。

提前感谢您的回答。

2 个答案:

答案 0 :(得分:1)

如果可能的话,我建议您检查一些将excel数据转换为json的工具 Excel to JSON

阅读json数据会有更多机会。

希望它有所帮助。

答案 1 :(得分:1)

查看这篇文章,了解PHPExcel替代方案:https://stackoverflow.com/a/3931142/4499987

由于您正在寻找一种节省内存的替代方案,我建议您使用Spout(https://github.com/box/spout)。它只使用10MB,无论电子表格大小如何,读取速度都会快于PHPExcel!