Copy Styles after insertNewColumnBefore

Fix #1425 which went stale 5 years ago, and which I've reopened. Style was not being set properly for last row. Also, Style was not being set at all for insertNewColumnBefore('B').
This commit is contained in:
oleibman
2025-05-14 16:56:01 -07:00
parent 3922d9ad00
commit 6a7c834f22
2 changed files with 59 additions and 2 deletions
+2 -2
View File
@@ -505,7 +505,7 @@ class ReferenceHelper
$highestColumn = $worksheet->getHighestColumn();
$highestRow = $worksheet->getHighestRow();
if ($numberOfColumns > 0 && $beforeColumn - 2 > 0) {
if ($numberOfColumns > 0 && $beforeColumn > 1) {
$this->duplicateStylesByColumn($worksheet, $beforeColumn, $beforeRow, $highestRow, $numberOfColumns);
}
@@ -1233,7 +1233,7 @@ class ReferenceHelper
private function duplicateStylesByColumn(Worksheet $worksheet, int $beforeColumn, int $beforeRow, int $highestRow, int $numberOfColumns): void
{
$beforeColumnName = Coordinate::stringFromColumnIndex($beforeColumn - 1);
for ($i = $beforeRow; $i <= $highestRow - 1; ++$i) {
for ($i = $beforeRow; $i <= $highestRow; ++$i) {
// Style
$coordinate = $beforeColumnName . $i;
if ($worksheet->cellExists($coordinate)) {
@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PHPUnit\Framework\TestCase;
class Issue1425Test extends TestCase
{
private static function setBackground(Worksheet $sheet, string $cells, string $color = 'ffffff00'): void
{
$sheet->getStyle($cells)
->getFill()
->setFillType(Fill::FILL_SOLID);
$sheet->getStyle($cells)
->getFill()
->getStartColor()
->setArgb($color);
}
/**
* Not extending styles to all cells after insertNewColumnBefore.
*/
public function testIssue4125(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Before');
$sheet->getCell('A1')->setValue(1);
$sheet->getCell('A2')->setValue(2);
$sheet->getCell('B1')->setValue(3);
$sheet->getCell('B2')->setValue(4);
self::setBackground($sheet, 'A1:A2');
self::setBackground($sheet, 'B1:B2', 'FF00FFFF');
$sheet->insertNewColumnBefore('B', 1);
$expected = [
'A1' => 'ffffff00',
'A2' => 'ffffff00',
'B1' => 'ffffff00',
'B2' => 'ffffff00',
'C1' => 'FF00FFFF',
'C2' => 'FF00FFFF',
];
foreach ($expected as $key => $value) {
$color = $sheet->getStyle($key)
->getFill()->getStartColor()->getArgb();
self::assertSame($value, $color, "error in cell $key");
}
$spreadsheet->disconnectWorksheets();
}
}