Skip to content

Commit ac33bd9

Browse files
author
Mark Baker
authored
Merge pull request #2652 from PHPOffice/Gnumeric-Selected-Cells-in-Worksheet
Set Selected Cells for Worksheets in Gnumeric Loader
2 parents 86f2684 + dbf25f0 commit ac33bd9

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ and this project adheres to [Semantic Versioning](https://semver.org).
1919
### Changed
2020

2121
- Gnumeric Reader now loads number formatting for cells.
22-
- Gnumeric Reader now correctly identifies selected worksheet.
22+
- Gnumeric Reader now correctly identifies selected worksheet and selected cells in a worksheet.
2323
- Some Refactoring of the Ods Reader, moving all formula and address translation from Ods to Excel into a separate class to eliminate code duplication and ensure consistency.
2424
- Make Boolean Conversion in Csv Reader locale-aware when using the String Value Binder.
2525

26-
This is determined b the Calculation Engine locale setting.
26+
This is determined by the Calculation Engine locale setting.
2727

2828
(i.e. `"Vrai"` wil be converted to a boolean `true` if the Locale is set to `fr`.)
2929

src/PhpSpreadsheet/Reader/Gnumeric.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ public function loadIntoExisting(string $filename, Spreadsheet $spreadsheet): Sp
309309
$this->processMergedCells($sheet);
310310
$this->processAutofilter($sheet);
311311

312+
$this->setSelectedCells($sheet);
312313
++$worksheetID;
313314
}
314315

@@ -329,6 +330,28 @@ private function setSelectedSheet(SimpleXMLElement $gnmXML): void
329330
}
330331
}
331332

333+
private function setSelectedCells(?SimpleXMLElement $sheet): void
334+
{
335+
if ($sheet !== null && isset($sheet->Selections)) {
336+
foreach ($sheet->Selections as $selection) {
337+
$startCol = (int) ($selection->StartCol ?? 0);
338+
$startRow = (int) ($selection->StartRow ?? 0) + 1;
339+
$endCol = (int) ($selection->EndCol ?? $startCol);
340+
$endRow = (int) ($selection->endRow ?? 0) + 1;
341+
342+
$startColumn = Coordinate::stringFromColumnIndex($startCol + 1);
343+
$endColumn = Coordinate::stringFromColumnIndex($endCol + 1);
344+
345+
$startCell = "{$startColumn}{$startRow}";
346+
$endCell = "{$endColumn}{$endRow}";
347+
$selectedRange = $startCell . (($endCell !== $startCell) ? ':' . $endCell : '');
348+
$this->spreadsheet->getActiveSheet()->setSelectedCell($selectedRange);
349+
350+
break;
351+
}
352+
}
353+
}
354+
332355
private function processMergedCells(?SimpleXMLElement $sheet): void
333356
{
334357
// Handle Merged Cells in this worksheet
@@ -357,15 +380,17 @@ private function processAutofilter(?SimpleXMLElement $sheet): void
357380

358381
private function setColumnWidth(int $whichColumn, float $defaultWidth): void
359382
{
360-
$columnDimension = $this->spreadsheet->getActiveSheet()->getColumnDimension(Coordinate::stringFromColumnIndex($whichColumn + 1));
383+
$columnDimension = $this->spreadsheet->getActiveSheet()
384+
->getColumnDimension(Coordinate::stringFromColumnIndex($whichColumn + 1));
361385
if ($columnDimension !== null) {
362386
$columnDimension->setWidth($defaultWidth);
363387
}
364388
}
365389

366390
private function setColumnInvisible(int $whichColumn): void
367391
{
368-
$columnDimension = $this->spreadsheet->getActiveSheet()->getColumnDimension(Coordinate::stringFromColumnIndex($whichColumn + 1));
392+
$columnDimension = $this->spreadsheet->getActiveSheet()
393+
->getColumnDimension(Coordinate::stringFromColumnIndex($whichColumn + 1));
369394
if ($columnDimension !== null) {
370395
$columnDimension->setVisible(false);
371396
}

tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericLoadTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ public function testLoad(): void
125125
self::assertTrue($sheet->getCell('B24')->getStyle()->getFont()->getSuperScript());
126126
$rowDimension = $sheet->getRowDimension(30);
127127
self::assertFalse($rowDimension->getVisible());
128+
129+
self::assertSame('B24', $sheet->getSelectedCells());
128130
}
129131

130132
public function testLoadFilter(): void
@@ -167,5 +169,7 @@ public function testLoadSelectedSheets(): void
167169
$sheet = $spreadsheet->getSheet(0);
168170
self::assertEquals('Report Data', $sheet->getTitle());
169171
self::assertEquals('Third Heading', $sheet->getCell('C2')->getValue());
172+
173+
self::assertSame('A1', $sheet->getSelectedCells());
170174
}
171175
}

0 commit comments

Comments
 (0)