Update Column Reference for Columns Beginning with Y and Z (#3264)

Fix #3263. Code was comparing column string to max column (XFD), but comparison was done by strings so that any column beginning with Y or Z would seem to exceed the max and would be handled incorrectly. Change to compare to maximum integer index of column (16384) instead.
This commit is contained in:
oleibman
2023-01-01 15:29:04 -08:00
committed by GitHub
parent d2938477d9
commit 644547fb86
3 changed files with 57 additions and 2 deletions
+2
View File
@@ -8,6 +8,8 @@ interface AddressRange
public const MAX_COLUMN = 'XFD';
public const MAX_COLUMN_INT = 16384;
/**
* @return mixed
*/
+1 -2
View File
@@ -116,8 +116,7 @@ class CellReferenceHelper
protected function updateColumnReference(int $newColumnIndex, string $absoluteColumn): string
{
$newColumn = Coordinate::stringFromColumnIndex($newColumnIndex + $this->numberOfColumns);
$newColumn = ($newColumn > AddressRange::MAX_COLUMN) ? AddressRange::MAX_COLUMN : $newColumn;
$newColumn = Coordinate::stringFromColumnIndex(min($newColumnIndex + $this->numberOfColumns, AddressRange::MAX_COLUMN_INT));
return $absoluteColumn . $newColumn;
}
@@ -23,14 +23,33 @@ class CellReferenceHelperTest extends TestCase
['A1', 'A1'],
['D5', 'D5'],
['G5', 'E5'],
'issue3363 Y5' => ['Y5', 'W5'],
'issue3363 Z5' => ['Z5', 'X5'],
['AA5', 'Y5'],
['AB5', 'Z5'],
['XFC5', 'XFA5'],
['XFD5', 'XFB5'],
['XFD5', 'XFC5'],
['XFD5', 'XFD5'],
['$E5', '$E5'],
'issue3363 $Z5' => ['$Z5', '$Z5'],
['$XFA5', '$XFA5'],
['$XFB5', '$XFB5'],
['$XFC5', '$XFC5'],
['$XFD5', '$XFD5'],
['G$5', 'E$5'],
'issue3363 Y$5' => ['Y$5', 'W$5'],
['XFC$5', 'XFA$5'],
['XFD$5', 'XFB$5'],
['XFD$5', 'XFC$5'],
['XFD$5', 'XFD$5'],
['I5', 'G5'],
['$G$5', '$G$5'],
'issue3363 $Z$5' => ['$Z$5', '$Z$5'],
['$XFA$5', '$XFA$5'],
['$XFB$5', '$XFB$5'],
['$XFC$5', '$XFC$5'],
['$XFD$5', '$XFD$5'],
];
}
@@ -50,10 +69,15 @@ class CellReferenceHelperTest extends TestCase
['A1', 'A1'],
['D5', 'D5'],
['C5', 'E5'],
'issue3363 Y5' => ['Y5', 'AA5'],
'issue3363 Z5' => ['Z5', 'AB5'],
['$E5', '$E5'],
'issue3363 $Y5' => ['$Y5', '$Y5'],
['C$5', 'E$5'],
'issue3363 Z$5' => ['Z$5', 'AB$5'],
['E5', 'G5'],
['$G$5', '$G$5'],
'issue3363 $Z$5' => ['$Z$5', '$Z$5'],
];
}
@@ -77,10 +101,15 @@ class CellReferenceHelperTest extends TestCase
['E1048576', 'E1048574'],
['E1048576', 'E1048575'],
['E1048576', 'E1048576'],
'issue3363 Y5' => ['Y7', 'Y5'],
'issue3363 Z5' => ['Z7', 'Z5'],
['E$5', 'E$5'],
'issue3363 Y$5' => ['Y$5', 'Y$5'],
['$E7', '$E5'],
'issue3363 $Z5' => ['$Z7', '$Z5'],
['E11', 'E9'],
['$E$9', '$E$9'],
'issue3363 $Z$5' => ['$Z$5', '$Z$5'],
];
}
@@ -100,10 +129,15 @@ class CellReferenceHelperTest extends TestCase
['A1', 'A1'],
['E4', 'E4'],
['E3', 'E5'],
'issue3363 Y5' => ['Y3', 'Y5'],
'issue3363 Z5' => ['Z3', 'Z5'],
['E$5', 'E$5'],
'issue3363 Y$5' => ['Y$5', 'Y$5'],
['$E3', '$E5'],
'issue3363 $Z5' => ['$Z3', '$Z5'],
['E7', 'E9'],
['$E$9', '$E$9'],
'issue3363 $Z$5' => ['$Z$5', '$Z$5'],
];
}
@@ -123,10 +157,15 @@ class CellReferenceHelperTest extends TestCase
['A1', 'A1'],
['D5', 'D5'],
['G5', 'E5'],
'issue3363 Y5' => ['Y5', 'W5'],
'issue3363 Z5' => ['Z5', 'X5'],
['$G5', '$E5'],
'issue3363 $Y5' => ['$Y5', '$W5'],
['G$5', 'E$5'],
'issue3363 Y$5' => ['Y$5', 'W$5'],
['I5', 'G5'],
['$I$5', '$G$5'],
'issue3363 $Y$5' => ['$Y$5', '$W$5'],
];
}
@@ -146,10 +185,15 @@ class CellReferenceHelperTest extends TestCase
['A1', 'A1'],
['D5', 'D5'],
['C5', 'E5'],
'issue3363 Y5' => ['Y5', 'AA5'],
'issue3363 Z5' => ['Z5', 'AB5'],
['$C5', '$E5'],
'issue3363 $Y5' => ['$Y5', '$AA5'],
['C$5', 'E$5'],
'issue3363 Z$5' => ['Z$5', 'AB$5'],
['E5', 'G5'],
['$E$5', '$G$5'],
'issue3363 $Z$5' => ['$Z$5', '$AB$5'],
];
}
@@ -169,10 +213,15 @@ class CellReferenceHelperTest extends TestCase
['A1', 'A1'],
['E4', 'E4'],
['E7', 'E5'],
'issue3363 Y5' => ['Y7', 'Y5'],
'issue3363 Z5' => ['Z7', 'Z5'],
['E$7', 'E$5'],
'issue3363 Y$5' => ['Y$7', 'Y$5'],
['$E7', '$E5'],
'issue3363 $Y5' => ['$Y7', '$Y5'],
['E11', 'E9'],
['$E$11', '$E$9'],
'issue3363 $Z$5' => ['$Z$7', '$Z$5'],
];
}
@@ -192,10 +241,15 @@ class CellReferenceHelperTest extends TestCase
['A1', 'A1'],
['E4', 'E4'],
['E3', 'E5'],
'issue3363 Y5' => ['Y3', 'Y5'],
'issue3363 Z5' => ['Z3', 'Z5'],
['E$3', 'E$5'],
'issue3363 Y$5' => ['Y$3', 'Y$5'],
['$E3', '$E5'],
'issue3363 $Z5' => ['$Z3', '$Z5'],
['E7', 'E9'],
['$E$7', '$E$9'],
'issue3363 $Z$5' => ['$Z$3', '$Z$5'],
];
}
}