Skip to content

Commit 6a7c834

Browse files
committed
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').
1 parent 3922d9a commit 6a7c834

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

src/PhpSpreadsheet/ReferenceHelper.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ public function insertNewBefore(
505505
$highestColumn = $worksheet->getHighestColumn();
506506
$highestRow = $worksheet->getHighestRow();
507507

508-
if ($numberOfColumns > 0 && $beforeColumn - 2 > 0) {
508+
if ($numberOfColumns > 0 && $beforeColumn > 1) {
509509
$this->duplicateStylesByColumn($worksheet, $beforeColumn, $beforeRow, $highestRow, $numberOfColumns);
510510
}
511511

@@ -1233,7 +1233,7 @@ private function adjustTableDelete(int $startCol, int $numberOfColumns, int $ran
12331233
private function duplicateStylesByColumn(Worksheet $worksheet, int $beforeColumn, int $beforeRow, int $highestRow, int $numberOfColumns): void
12341234
{
12351235
$beforeColumnName = Coordinate::stringFromColumnIndex($beforeColumn - 1);
1236-
for ($i = $beforeRow; $i <= $highestRow - 1; ++$i) {
1236+
for ($i = $beforeRow; $i <= $highestRow; ++$i) {
12371237
// Style
12381238
$coordinate = $beforeColumnName . $i;
12391239
if ($worksheet->cellExists($coordinate)) {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
6+
7+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
8+
use PhpOffice\PhpSpreadsheet\Style\Fill;
9+
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
10+
use PHPUnit\Framework\TestCase;
11+
12+
class Issue1425Test extends TestCase
13+
{
14+
private static function setBackground(Worksheet $sheet, string $cells, string $color = 'ffffff00'): void
15+
{
16+
$sheet->getStyle($cells)
17+
->getFill()
18+
->setFillType(Fill::FILL_SOLID);
19+
$sheet->getStyle($cells)
20+
->getFill()
21+
->getStartColor()
22+
->setArgb($color);
23+
}
24+
25+
/**
26+
* Not extending styles to all cells after insertNewColumnBefore.
27+
*/
28+
public function testIssue4125(): void
29+
{
30+
$spreadsheet = new Spreadsheet();
31+
$sheet = $spreadsheet->getActiveSheet();
32+
$sheet->setTitle('Before');
33+
$sheet->getCell('A1')->setValue(1);
34+
$sheet->getCell('A2')->setValue(2);
35+
$sheet->getCell('B1')->setValue(3);
36+
$sheet->getCell('B2')->setValue(4);
37+
self::setBackground($sheet, 'A1:A2');
38+
self::setBackground($sheet, 'B1:B2', 'FF00FFFF');
39+
40+
$sheet->insertNewColumnBefore('B', 1);
41+
42+
$expected = [
43+
'A1' => 'ffffff00',
44+
'A2' => 'ffffff00',
45+
'B1' => 'ffffff00',
46+
'B2' => 'ffffff00',
47+
'C1' => 'FF00FFFF',
48+
'C2' => 'FF00FFFF',
49+
];
50+
foreach ($expected as $key => $value) {
51+
$color = $sheet->getStyle($key)
52+
->getFill()->getStartColor()->getArgb();
53+
self::assertSame($value, $color, "error in cell $key");
54+
}
55+
$spreadsheet->disconnectWorksheets();
56+
}
57+
}

0 commit comments

Comments
 (0)