Skip to content

Commit 04cfc57

Browse files
committed
Xlsx Style Writer Minor Refactoring
In our unit tests, we can test the Worksheet Xml which PhpSpreadsheet will generate without having to actually write the spreadsheet to and read it from disk. This refactoring allows us to do the same for Styles, as demonstrated in the new StylesWriterTest.
1 parent 44c3bd5 commit 04cfc57

File tree

2 files changed

+63
-6
lines changed

2 files changed

+63
-6
lines changed

src/PhpSpreadsheet/Writer/Xlsx.php

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,40 @@ public function getWriterPartWorksheet(): Worksheet
249249
return $this->writerPartWorksheet;
250250
}
251251

252+
public function createStyleDictionaries(): void
253+
{
254+
$this->styleHashTable->addFromSource(
255+
$this->getWriterPartStyle()->allStyles(
256+
$this->spreadSheet
257+
)
258+
);
259+
$this->stylesConditionalHashTable->addFromSource(
260+
$this->getWriterPartStyle()->allConditionalStyles(
261+
$this->spreadSheet
262+
)
263+
);
264+
$this->fillHashTable->addFromSource(
265+
$this->getWriterPartStyle()->allFills(
266+
$this->spreadSheet
267+
)
268+
);
269+
$this->fontHashTable->addFromSource(
270+
$this->getWriterPartStyle()->allFonts(
271+
$this->spreadSheet
272+
)
273+
);
274+
$this->bordersHashTable->addFromSource(
275+
$this->getWriterPartStyle()->allBorders(
276+
$this->spreadSheet
277+
)
278+
);
279+
$this->numFmtHashTable->addFromSource(
280+
$this->getWriterPartStyle()->allNumberFormats(
281+
$this->spreadSheet
282+
)
283+
);
284+
}
285+
252286
/**
253287
* Save PhpSpreadsheet to file.
254288
*
@@ -275,12 +309,7 @@ public function save($filename, int $flags = 0): void
275309
}
276310

277311
// Create styles dictionaries
278-
$this->styleHashTable->addFromSource($this->getWriterPartStyle()->allStyles($this->spreadSheet));
279-
$this->stylesConditionalHashTable->addFromSource($this->getWriterPartStyle()->allConditionalStyles($this->spreadSheet));
280-
$this->fillHashTable->addFromSource($this->getWriterPartStyle()->allFills($this->spreadSheet));
281-
$this->fontHashTable->addFromSource($this->getWriterPartStyle()->allFonts($this->spreadSheet));
282-
$this->bordersHashTable->addFromSource($this->getWriterPartStyle()->allBorders($this->spreadSheet));
283-
$this->numFmtHashTable->addFromSource($this->getWriterPartStyle()->allNumberFormats($this->spreadSheet));
312+
$this->createStyleDictionaries();
284313

285314
// Create drawing dictionary
286315
$this->drawingHashTable->addFromSource($this->getWriterPartDrawing()->allDrawings($this->spreadSheet));
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
6+
7+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
8+
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
9+
use PHPUnit\Framework\TestCase;
10+
11+
class StylesWriterTest extends TestCase
12+
{
13+
public function testStylesWriter(): void
14+
{
15+
$spreadsheet = new Spreadsheet();
16+
$sheet = $spreadsheet->getActiveSheet();
17+
18+
$writer = new XlsxWriter($spreadsheet);
19+
$writer->createStyleDictionaries();
20+
$writerStyle = new XlsxWriter\Style($writer);
21+
$data = $writerStyle->writeStyles($spreadsheet);
22+
self::assertStringContainsString(
23+
'<fonts count="1"><font><b val="0"/><i val="0"/><strike val="0"/><u val="none"/><sz val="11"/><color rgb="FF000000"/><name val="Calibri"/></font></fonts>',
24+
$data
25+
);
26+
$spreadsheet->disconnectWorksheets();
27+
}
28+
}

0 commit comments

Comments
 (0)