Merge pull request #3074 from PHPOffice/Issue-3056_Update-DataValidation-SqRef-On-Insert-Delete-Rows-Columns

Ensure that the sqRef stored for a DataValidation is updated on insert/delete rows/columns
This commit is contained in:
Mark Baker 2022-09-18 17:36:54 +02:00 committed by GitHub
commit 12cf2159f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 2 deletions

View File

@ -38,6 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
### Fixed ### Fixed
- Fix DataValidation sqRef when inserting/deleting rows/columns [Issue #3056](https://github.com/PHPOffice/PhpSpreadsheet/issues/3056) [PR #3074](https://github.com/PHPOffice/PhpSpreadsheet/pull/3074)
- Named ranges not usable as anchors in OFFSET function [Issue #3013](https://github.com/PHPOffice/PhpSpreadsheet/issues/3013) - Named ranges not usable as anchors in OFFSET function [Issue #3013](https://github.com/PHPOffice/PhpSpreadsheet/issues/3013)
- Fully flatten an array [Issue #2955](https://github.com/PHPOffice/PhpSpreadsheet/issues/2955) [PR #2956](https://github.com/PHPOffice/PhpSpreadsheet/pull/2956) - Fully flatten an array [Issue #2955](https://github.com/PHPOffice/PhpSpreadsheet/issues/2955) [PR #2956](https://github.com/PHPOffice/PhpSpreadsheet/pull/2956)
- cellExists() and getCell() methods should support UTF-8 named cells [Issue #2987](https://github.com/PHPOffice/PhpSpreadsheet/issues/2987) [PR #2988](https://github.com/PHPOffice/PhpSpreadsheet/pull/2988) - cellExists() and getCell() methods should support UTF-8 named cells [Issue #2987](https://github.com/PHPOffice/PhpSpreadsheet/issues/2987) [PR #2988](https://github.com/PHPOffice/PhpSpreadsheet/pull/2988)

View File

@ -253,10 +253,11 @@ class ReferenceHelper
? uksort($aDataValidationCollection, [self::class, 'cellReverseSort']) ? uksort($aDataValidationCollection, [self::class, 'cellReverseSort'])
: uksort($aDataValidationCollection, [self::class, 'cellSort']); : uksort($aDataValidationCollection, [self::class, 'cellSort']);
foreach ($aDataValidationCollection as $cellAddress => $value) { foreach ($aDataValidationCollection as $cellAddress => $dataValidation) {
$newReference = $this->updateCellReference($cellAddress); $newReference = $this->updateCellReference($cellAddress);
if ($cellAddress !== $newReference) { if ($cellAddress !== $newReference) {
$worksheet->setDataValidation($newReference, $value); $dataValidation->setSqref($newReference);
$worksheet->setDataValidation($newReference, $dataValidation);
$worksheet->setDataValidation($cellAddress, null); $worksheet->setDataValidation($cellAddress, null);
} }
} }

View File

@ -311,6 +311,7 @@ class ReferenceHelperTest extends TestCase
self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation()); self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation());
self::assertTrue($sheet->getCell('E7')->hasDataValidation()); self::assertTrue($sheet->getCell('E7')->hasDataValidation());
self::assertSame('E7', $sheet->getDataValidation('E7')->getSqref());
} }
public function testDeleteRowsWithDataValidation(): void public function testDeleteRowsWithDataValidation(): void
@ -326,6 +327,7 @@ class ReferenceHelperTest extends TestCase
self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation()); self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation());
self::assertTrue($sheet->getCell('E3')->hasDataValidation()); self::assertTrue($sheet->getCell('E3')->hasDataValidation());
self::assertSame('E3', $sheet->getDataValidation('E3')->getSqref());
} }
public function testDeleteColumnsWithDataValidation(): void public function testDeleteColumnsWithDataValidation(): void
@ -341,6 +343,7 @@ class ReferenceHelperTest extends TestCase
self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation()); self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation());
self::assertTrue($sheet->getCell('C5')->hasDataValidation()); self::assertTrue($sheet->getCell('C5')->hasDataValidation());
self::assertSame('C5', $sheet->getDataValidation('C5')->getSqref());
} }
public function testInsertColumnsWithDataValidation(): void public function testInsertColumnsWithDataValidation(): void
@ -356,6 +359,7 @@ class ReferenceHelperTest extends TestCase
self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation()); self::assertFalse($sheet->getCell($cellAddress)->hasDataValidation());
self::assertTrue($sheet->getCell('G5')->hasDataValidation()); self::assertTrue($sheet->getCell('G5')->hasDataValidation());
self::assertSame('G5', $sheet->getDataValidation('G5')->getSqref());
} }
private function setDataValidation(Worksheet $sheet, string $cellAddress): void private function setDataValidation(Worksheet $sheet, string $cellAddress): void