我正在使用我以前多次使用过的PHPExcel 。我现在遇到的问题是在读取 Excel2007 文件(.xlsx - 格式)时。我正在做的只是循环.xlsx
文件并按行/列创建一个数组,然后print_r()
在读取操作之后对结果进行处理,以确保数据输出在将其导入 MySQL 数据库之前是好的。
现在,当读取 Excel2007.xlsx
文件(6MB)时,输出失败,但有趣的是,如果我将文件保存为旧格式.xls
(1992-2004 - Excel5),文件会变大(16MB)但输出正确。这让我最初认为这不是内存问题,因为较旧的较大.xls
文件 (16MB) 运行没有问题,并且几乎是.xlsx
文件大小 (6MB) 的 3 倍。
出于测试目的,我随后在 (6MB) 文件中复制了 30,000 行中的 25 行,.xlsx
并创建了一个新的 Excel2007 .xlsx
,并针对较小的 25 行数据集运行导入并正确输出。这让我认为这是一个内存问题,但与.xlsx
格式特别相关......
我在 Amazon Web Services 上运行服务器并且拥有C4.Xlarge(16 核,30GB RAM),所以我应该有足够的资源来运行这个操作。
问题:为什么我的输出在读取较小.xlsx
文件而不是较大.xls
文件时会失败,但在读取较小.xlsx
(25 行)文件时会成功?
//PHP函数
function parse_xls($file){
ini_set('memory_limit','-1');
$type = PHPExcel_IOFactory::identify($file);
$reader = PHPExcel_IOFactory::createReader($type);
$reader->setReadDataOnly(true);
$xls = $reader->load($file);
$sheet = $xls->getActiveSheet();
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
for($row=2; $row <= ($highestRow+2); $row++){
$import[$row] = [];
for($col=0; $col < $highestColumnIndex; $col++){
$result = $sheet->getCellByColumnAndRow($col, $row)->getValue();
array_push($import[$row],$result);
}
}
print_r($import);
die();
}