mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-10-08 21:06:22 +00:00
06c4aff394
* Avoid Allocating RowDimension Unneccesarily This PR builds on PR #3527, introduced but subsequently closed by @goetas. The observation was that AutoFilter did not need to allocate a new RowDimension when the row was not to be filtered. While vetting the PR, it became apparent that Xlsx Writer also allocates RowDimension unnecessarily, with some minor adjustments possible for Ods and Mpdf as well. My tests confirm the initial observation that there can be a considerable memory savings when RowDimension is allocated only when needed. So, even though the original PR is withdrawn, there seems to be value in proceeding with it anyhow. * Add Some Tests
56 lines
1.8 KiB
PHP
56 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
|
|
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
|
|
|
|
class RowDimensionSaveTest extends AbstractFunctional
|
|
{
|
|
/**
|
|
* @dataProvider typeProvider
|
|
*/
|
|
public function testSaveNoAllocateRowDimension(string $type): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->getCell('A1')->setValue(1);
|
|
$sheet->getCell('A2')->setValue(2);
|
|
$sheet->getCell('A3')->setValue(3);
|
|
$sheet->getRowDimension(2)->setVisible(false);
|
|
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $type);
|
|
self::assertFalse($sheet->rowDimensionExists(1));
|
|
self::assertTrue($sheet->rowDimensionExists(2));
|
|
self::assertFalse($sheet->rowDimensionExists(3));
|
|
$spreadsheet->disconnectWorksheets();
|
|
$reloadedSpreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public static function typeProvider(): array
|
|
{
|
|
return [
|
|
['Xlsx'],
|
|
['Xls'],
|
|
['Ods'],
|
|
['Html'],
|
|
];
|
|
}
|
|
|
|
public function testSaveNoAllocateRowDimensionMpdf(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->getCell('A1')->setValue(1);
|
|
$sheet->getCell('A2')->setValue(2);
|
|
$sheet->getCell('A3')->setValue(3);
|
|
$sheet->getRowDimension(2)->setVisible(false);
|
|
$writer = new Mpdf($spreadsheet);
|
|
$writer->generateHtmlAll();
|
|
self::assertFalse($sheet->rowDimensionExists(1));
|
|
self::assertTrue($sheet->rowDimensionExists(2));
|
|
self::assertFalse($sheet->rowDimensionExists(3));
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
}
|