mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-10 10:06:30 +00:00
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:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user