Fix column names if read filter calls in XLSX reader skip columns

Fixes #777
Closes #778
This commit is contained in:
Dennis Birkholz 2018-11-19 14:48:30 +01:00 committed by Adrien Crivelli
parent dfa808a955
commit e56fbe2745
No known key found for this signature in database
GPG Key ID: B182FD79DC6DE92E
4 changed files with 37 additions and 1 deletions

View File

@ -10,11 +10,12 @@ and this project adheres to [Semantic Versioning](https://semver.org).
### Added
- Refactored Matrix Functions to use external Matrix library
- Possibility to specify custom colors of values for pie and donut charts (https://github.com/PHPOffice/PhpSpreadsheet/pull/768)
- Possibility to specify custom colors of values for pie and donut charts - [#768](https://github.com/PHPOffice/PhpSpreadsheet/pull/768)
### Fixed
- Improve XLSX parsing speed if no readFilter is applied - [#772](https://github.com/PHPOffice/PhpSpreadsheet/issues/772)
- Fix column names if read filter calls in XLSX reader skip columns - [#777](https://github.com/PHPOffice/PhpSpreadsheet/pull/777)
## [1.5.2] - 2018-11-25
@ -40,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
- Fix print area parser for XLSX reader - [#734](https://github.com/PHPOffice/PhpSpreadsheet/pull/734)
- Support overriding `DefaultValueBinder::dataTypeForValue()` without overriding `DefaultValueBinder::bindValue()` - [#735](https://github.com/PHPOffice/PhpSpreadsheet/pull/735)
- Mpdf export can exceed pcre.backtrack_limit - [#637](https://github.com/PHPOffice/PhpSpreadsheet/issues/637)
- Fix index overflow on data values array - [#748](https://github.com/PHPOffice/PhpSpreadsheet/pull/748)
## [1.5.0] - 2018-10-21

View File

@ -911,6 +911,8 @@ class Xlsx extends BaseReader
$coordinates = Coordinate::coordinateFromString($r);
if (!$this->getReadFilter()->readCell($coordinates[0], (int) $coordinates[1], $docSheet->getTitle())) {
$rowIndex += 1;
continue;
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader;
use PhpOffice\PhpSpreadsheet\Reader\IReadFilter;
/**
* Show only cells from odd columns.
*/
class OddColumnReadFilter implements IReadFilter
{
public function readCell($column, $row, $worksheetName = '')
{
return (\ord(\substr($column, -1, 1)) % 2) === 1;
}
}

View File

@ -16,4 +16,20 @@ class XlsxTest extends TestCase
$reader = new Xlsx();
$reader->load($filename);
}
/**
* Test load Xlsx file and use a read filter.
*/
public function testLoadWithReadFilter()
{
$filename = './data/Reader/XLSX/without_cell_reference.xlsx';
$reader = new Xlsx();
$reader->setReadFilter(new OddColumnReadFilter());
$data = $reader->load($filename)->getActiveSheet()->toArray();
$ref = [1.0, null, 3.0, null, 5.0, null, 7.0, null, 9.0, null];
for ($i = 0; $i < 10; ++$i) {
$this->assertEquals($ref, \array_slice($data[$i], 0, 10, true));
}
}
}