mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-15 12:36:32 +00:00
b65aecdcec
A number of interesting performance ideas have been submitted by @kemo. PR #4833 optimizes Xls Reader in a number of different ways. One of those, slightly modified, is to use the protected `readFilter` property which is available to all classes which inherit from `BaseReader` (which all our supported readers do), rather than call the `getReadFilter` method to obtain it (often in a loop). That applies to all readers, not just Xls, and is such a good idea that I am fast-tracking it ahead of 4833. Gnumeric, Ods, Xls, Xlsx, and Xml will all receive small performance boosts from it. Csv already does this, so no change is needed there. Html and Slk do not appear to do any filtering; possibly work for another day.
86 lines
2.5 KiB
PHP
86 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter;
|
|
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class Issue4416Test extends TestCase
|
|
{
|
|
private static string $file = 'tests/data/Reader/XLSX/issue.4416.smallauto.xlsx';
|
|
|
|
public function testNoFilter(): void
|
|
{
|
|
$file = self::$file;
|
|
$reader = new XlsxReader();
|
|
$spreadsheet = $reader->load($file);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
self::assertEqualsWithDelta(
|
|
16.5430,
|
|
$sheet->getColumnDimension('A')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEqualsWithDelta(
|
|
6.0,
|
|
$sheet->getColumnDimension('B')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEqualsWithDelta(
|
|
11.3633,
|
|
$sheet->getColumnDimension('C')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEqualsWithDelta(
|
|
41.0898,
|
|
$sheet->getColumnDimension('D')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEqualsWithDelta(
|
|
28.5,
|
|
$sheet->getRowDimension(6)->getRowHeight(),
|
|
1E-4
|
|
);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testWithFilter(): void
|
|
{
|
|
$file = self::$file;
|
|
$reader = new XlsxReader();
|
|
self::assertInstanceOf(DefaultReadFilter::class, $reader->getReadFilter());
|
|
$reader->setReadFilter(new Issue4416Filter());
|
|
self::assertInstanceOf(Issue4416Filter::class, $reader->getReadFilter());
|
|
$spreadsheet = $reader->load($file);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
self::assertEqualsWithDelta(
|
|
16.5430,
|
|
$sheet->getColumnDimension('A')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEqualsWithDelta(
|
|
6.0,
|
|
$sheet->getColumnDimension('B')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEqualsWithDelta(
|
|
11.3633,
|
|
$sheet->getColumnDimension('C')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEqualsWithDelta(
|
|
41.0898,
|
|
$sheet->getColumnDimension('D')->getWidth(),
|
|
1E-4
|
|
);
|
|
self::assertEquals(
|
|
-1,
|
|
$sheet->getRowDimension(6)->getRowHeight(),
|
|
'row has been filtered away'
|
|
);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
}
|