【问题标题】:PHPExcel: using "getHighestRow" in combination with read filterPHPExcel:结合读取过滤器使用“getHighestRow”
【发布时间】:2014-07-25 14:00:39
【问题描述】:

我目前正在使用 PHPExcel 使用读取过滤器以块的形式读取 excel 文件,因为电子表格将来有可能变得很大,我需要确保有足够的内存来处理它,无论大小。

作为逻辑的一部分,我想检索工作表中的行数,我知道可以按如下方式完成:

$file = 'path/to/spreadsheet.xslx';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($file);
return $objPHPExcel->getActiveSheet()->getHighestRow();

我的问题是,如果文件太大,这样做会导致 PHP 内存不足吗?

即就像我对大文件使用以下内容一样:

$objPHPExcel->getActiveSheet()->tooArray();

如果是这样,有没有办法在文件变大时检索最高行而不会导致内存问题?

我已经在我的本地机器上测试了一个 3MB 的文件,它似乎可以应付得很好,除了文件越大返回最高行的时间越长。

【问题讨论】:

  • 不确定是否有替代方法,也许检查 PHPExcel 库中的迭代器并尝试使其更适合您的情况?不确定它是否会改变很多,无论如何这是一个繁重的阐述:)
  • 酷,会的,感谢您的回复:)。由于这是一个命令行工具,我最终可能只是求助于手动指定行数作为参数......

标签: php phpexcel


【解决方案1】:

您可以在不加载整个文件的情况下检索工作表中的行数(或列数):

$file = 'path/to/spreadsheet.xslx';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$worksheetData = $objReader->listWorksheetInfo($file);

echo '<h3>Worksheet Information</h3>';
echo '<ol>';
foreach ($worksheetData as $worksheet) {
    echo '<li>', $worksheet['worksheetName'], '<br />';
    echo 'Rows: ', $worksheet['totalRows'], 
        ' Columns: ', $worksheet['totalColumns'], '<br />';
    echo 'Cell Range: A1:', 
        $worksheet['lastColumnLetter'], $worksheet['totalRows'];
    echo '</li>';
}
echo '</ol>';

PHPExcel User Documentation - Reading Spreadsheet Files的第7节(Helper Methods)所示

【讨论】:

  • 啊哈,太棒了,我确实想知道是否有某种方法可以处理我没有遇到的元数据。谢谢马克!
  • 在任何关于 PHPexcel 的问题中,有什么方法可以标记 Mark Ba​​ker? :P
  • @MarkBaker 如果我需要计算唯一行(按特定列),我怎样才能有效地实现呢?假设要获取名为“用户名”的列的唯一值总数?忽略重复项
  • @Andrew $uniqueCount = count(array_unique(array_column($objPHPExcel-&gt;getActiveSheet()-&gt;rangeToArray('D1:D100'), 0))); 只要你知道哪一列有你的用户名,总共有多少行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 2011-11-10
相关资源
最近更新 更多