Skip to content

The 'Reader::setReadEmptyCells' method has no effect on Xlsx reader #810

Closed
@phinor

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

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions