The 'Reader::setReadEmptyCells' method has no effect on Xlsx reader #810
Closed
Description
This is:
- [x] a bug report
- [ ] a feature request
- [x] **not** a usage question (ask them on https://stackoverflow.com/questions/tagged/phpspreadsheet or https://gitter.im/PHPOffice/PhpSpreadsheet)
What is the expected behavior?
Empty cells will not be read from the spreadsheet and will not contribute to overall memory usage.
What is the current behavior?
Empty cells are loaded, contributing to overall memory utilisation.
What are the steps to reproduce?
In this example, I expect the two spreadsheets to have similar memory utilisation.
<?php
require __DIR__ . '/vendor/autoload.php';
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter ($spreadsheet, "Xlsx");
$writer->save ("minimal.xlsx");
for ($row = 0; $row < 100; $row ++) {
for ($column = 0; $column < 100; $column ++) {
$spreadsheet->getActiveSheet ()->getCellByColumnAndRow ($column, $row)->setValue ("");
}
}
$writer->save ("large.xlsx");
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadEmptyCells (false);
$memStart = memory_get_usage ();
$min = $reader->load ("minimal.xlsx");
$memMin = memory_get_usage ();
echo "Memory utilisation for minimal: " . ($memMin - $memStart) . "<br>";
$max = $reader->load ("large.xlsx");
$memMax = memory_get_usage ();
echo "Memory utilisation for large: " . ($memMax - $memMin) . "<br>";
for ($i = 0; $i < 5; $i ++) {
$minAgain [] = $reader->load ("minimal.xlsx");
$memMin = memory_get_usage ();
echo "Memory utilisation for next minimal: " . ($memMin - $memMax) . "<br>";
$maxAgain [] = $reader->load ("large.xlsx");
$memMax = memory_get_usage ();
echo "Memory utilisation for next large: " . ($memMax - $memMin) . "<br>";
}
Which versions of PhpSpreadsheet and PHP are affected?
Currently using PHP 7.0.3; PhpSpreadsheet 1.5.2