Phpstan Baseline < 4000 Lines Part 3 (#3041)

The last of these changes for now. No remaining Phpstan complaints in any Writer/Xlsx. Number of lines remaining in Phpstan baseline is now below 3500.
This commit is contained in:
oleibman 2022-09-03 19:00:01 -07:00 committed by GitHub
parent 4f8aa806bc
commit 5f33ec0eea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 111 additions and 273 deletions

View File

@ -3474,198 +3474,3 @@ parameters:
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xls\\\\Xf\\:\\:\\$diag is never read, only written\\.$#" message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xls\\\\Xf\\:\\:\\$diag is never read, only written\\.$#"
count: 1 count: 1
path: src/PhpSpreadsheet/Writer/Xls/Xf.php path: src/PhpSpreadsheet/Writer/Xls/Xf.php
-
message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx.php
-
message: "#^Parameter \\#1 \\$path of function basename expects string, array\\|string\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx.php
-
message: "#^Parameter \\#1 \\$path of function dirname expects string, array\\|string\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx.php
-
message: "#^Possibly invalid array key type array\\|string\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx.php
-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\:\\:\\$pathNames has no type specified\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx.php
-
message: "#^Expression on left side of \\?\\? is not nullable\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/DefinedNames.php
-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Rels\\:\\:writeUnparsedRelationship\\(\\) has parameter \\$relationship with no type specified\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Rels.php
-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Rels\\:\\:writeUnparsedRelationship\\(\\) has parameter \\$type with no type specified\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Rels.php
-
message: "#^Parameter \\#2 \\$id of method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Rels\\:\\:writeRelationship\\(\\) expects int, string given\\.$#"
count: 5
path: src/PhpSpreadsheet/Writer/Xlsx/Rels.php
-
message: "#^Parameter \\#4 \\$target of method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Rels\\:\\:writeRelationship\\(\\) expects string, array\\|string\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Rels.php
-
message: "#^Cannot call method getBold\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getColor\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getItalic\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getName\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getSize\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getStrikethrough\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getSubscript\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 2
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getSuperscript\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 2
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getUnderline\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Instanceof between \\*NEVER\\* and PhpOffice\\\\PhpSpreadsheet\\\\RichText\\\\RichText will always evaluate to false\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Instanceof between string and PhpOffice\\\\PhpSpreadsheet\\\\RichText\\\\RichText will always evaluate to false\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Parameter \\#1 \\$text of method PhpOffice\\\\PhpSpreadsheet\\\\RichText\\\\RichText\\:\\:createTextRun\\(\\) expects string, string\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, float\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, int given\\.$#"
count: 2
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, int\\<0, max\\> given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, string\\|null given\\.$#"
count: 4
path: src/PhpSpreadsheet/Writer/Xlsx/StringTable.php
-
message: "#^Cannot call method getStyle\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Conditional\\|null\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Comparison operation \"\\<\" between int\\<min, \\-1\\> and 0 is always true\\.$#"
count: 2
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$borders of method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Style\\:\\:writeBorder\\(\\) expects PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Borders, PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Borders\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$fill of method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Style\\:\\:writeFill\\(\\) expects PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Fill, PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Fill\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$font of method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Style\\:\\:writeFont\\(\\) expects PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font, PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\Font\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$numberFormat of method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Style\\:\\:writeNumFmt\\(\\) expects PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\NumberFormat, PhpOffice\\\\PhpSpreadsheet\\\\Style\\\\NumberFormat\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, float given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, int given\\.$#"
count: 22
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, int\\<0, max\\> given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, int\\<1, max\\> given\\.$#"
count: 2
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, int\\|null given\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Parameter \\#2 \\$value of method XMLWriter\\:\\:writeAttribute\\(\\) expects string, string\\|null given\\.$#"
count: 7
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php
-
message: "#^Result of \\|\\| is always true\\.$#"
count: 1
path: src/PhpSpreadsheet/Writer/Xlsx/Style.php

View File

@ -349,13 +349,16 @@ class Xlsx extends BaseWriter
//a custom UI in this workbook ? add it ("base" xml and additional objects (pictures) and rels) //a custom UI in this workbook ? add it ("base" xml and additional objects (pictures) and rels)
if ($this->spreadSheet->hasRibbon()) { if ($this->spreadSheet->hasRibbon()) {
$tmpRibbonTarget = $this->spreadSheet->getRibbonXMLData('target'); $tmpRibbonTarget = $this->spreadSheet->getRibbonXMLData('target');
$tmpRibbonTarget = is_string($tmpRibbonTarget) ? $tmpRibbonTarget : '';
$zipContent[$tmpRibbonTarget] = $this->spreadSheet->getRibbonXMLData('data'); $zipContent[$tmpRibbonTarget] = $this->spreadSheet->getRibbonXMLData('data');
if ($this->spreadSheet->hasRibbonBinObjects()) { if ($this->spreadSheet->hasRibbonBinObjects()) {
$tmpRootPath = dirname($tmpRibbonTarget) . '/'; $tmpRootPath = dirname($tmpRibbonTarget) . '/';
$ribbonBinObjects = $this->spreadSheet->getRibbonBinObjects('data'); //the files to write $ribbonBinObjects = $this->spreadSheet->getRibbonBinObjects('data'); //the files to write
if (is_array($ribbonBinObjects)) {
foreach ($ribbonBinObjects as $aPath => $aContent) { foreach ($ribbonBinObjects as $aPath => $aContent) {
$zipContent[$tmpRootPath . $aPath] = $aContent; $zipContent[$tmpRootPath . $aPath] = $aContent;
} }
}
//the rels for files //the rels for files
$zipContent[$tmpRootPath . '_rels/' . basename($tmpRibbonTarget) . '.rels'] = $this->getWriterPartRelsRibbon()->writeRibbonRelationships($this->spreadSheet); $zipContent[$tmpRootPath . '_rels/' . basename($tmpRibbonTarget) . '.rels'] = $this->getWriterPartRelsRibbon()->writeRibbonRelationships($this->spreadSheet);
} }
@ -684,6 +687,7 @@ class Xlsx extends BaseWriter
return $this; return $this;
} }
/** @var array */
private $pathNames = []; private $pathNames = [];
private function addZipFile(string $path, string $content): void private function addZipFile(string $path, string $content): void

View File

@ -118,7 +118,7 @@ class DefinedNames
$range[1] = Coordinate::absoluteCoordinate($range[1]); $range[1] = Coordinate::absoluteCoordinate($range[1]);
$range = implode(':', $range); $range = implode(':', $range);
$this->objWriter->writeRawData('\'' . str_replace("'", "''", $worksheet->getTitle() ?? '') . '\'!' . $range); $this->objWriter->writeRawData('\'' . str_replace("'", "''", $worksheet->getTitle()) . '\'!' . $range);
$this->objWriter->endElement(); $this->objWriter->endElement();
} }

View File

@ -67,12 +67,13 @@ class Rels extends WriterPart
'xl/workbook.xml' 'xl/workbook.xml'
); );
// a custom UI in workbook ? // a custom UI in workbook ?
$target = $spreadsheet->getRibbonXMLData('target');
if ($spreadsheet->hasRibbon()) { if ($spreadsheet->hasRibbon()) {
$this->writeRelationShip( $this->writeRelationShip(
$objWriter, $objWriter,
5, 5,
'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility', 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility',
$spreadsheet->getRibbonXMLData('target') is_string($target) ? $target : ''
); );
} }
@ -284,7 +285,7 @@ class Rels extends WriterPart
return $objWriter->getData(); return $objWriter->getData();
} }
private function writeUnparsedRelationship(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $worksheet, XMLWriter $objWriter, $relationship, $type): void private function writeUnparsedRelationship(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $worksheet, XMLWriter $objWriter, string $relationship, string $type): void
{ {
$unparsedLoadedData = $worksheet->getParent()->getUnparsedLoadedData(); $unparsedLoadedData = $worksheet->getParent()->getUnparsedLoadedData();
if (!isset($unparsedLoadedData['sheets'][$worksheet->getCodeName()][$relationship])) { if (!isset($unparsedLoadedData['sheets'][$worksheet->getCodeName()][$relationship])) {
@ -448,7 +449,7 @@ class Rels extends WriterPart
/** /**
* Write Override content type. * Write Override content type.
* *
* @param int $id Relationship ID. rId will be prepended! * @param int|string $id Relationship ID. rId will be prepended!
* @param string $type Relationship type * @param string $type Relationship type
* @param string $target Relationship target * @param string $target Relationship target
* @param string $targetMode Relationship target mode * @param string $targetMode Relationship target mode

View File

@ -66,7 +66,7 @@ class StringTable extends WriterPart
/** /**
* Write string table to XML format. * Write string table to XML format.
* *
* @param string[] $stringTable * @param (string|RichText)[] $stringTable
* *
* @return string XML Output * @return string XML Output
*/ */
@ -86,13 +86,13 @@ class StringTable extends WriterPart
// String table // String table
$objWriter->startElement('sst'); $objWriter->startElement('sst');
$objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
$objWriter->writeAttribute('uniqueCount', count($stringTable)); $objWriter->writeAttribute('uniqueCount', (string) count($stringTable));
// Loop through string table // Loop through string table
foreach ($stringTable as $textElement) { foreach ($stringTable as $textElement) {
$objWriter->startElement('si'); $objWriter->startElement('si');
if (!$textElement instanceof RichText) { if (!($textElement instanceof RichText)) {
$textToWrite = StringHelper::controlCharacterPHP2OOXML($textElement); $textToWrite = StringHelper::controlCharacterPHP2OOXML($textElement);
$objWriter->startElement('t'); $objWriter->startElement('t');
if ($textToWrite !== trim($textToWrite)) { if ($textToWrite !== trim($textToWrite)) {
@ -100,7 +100,7 @@ class StringTable extends WriterPart
} }
$objWriter->writeRawData($textToWrite); $objWriter->writeRawData($textToWrite);
$objWriter->endElement(); $objWriter->endElement();
} elseif ($textElement instanceof RichText) { } else {
$this->writeRichText($objWriter, $textElement); $this->writeRichText($objWriter, $textElement);
} }
@ -130,14 +130,16 @@ class StringTable extends WriterPart
$objWriter->startElement($prefix . 'r'); $objWriter->startElement($prefix . 'r');
// rPr // rPr
if ($element instanceof Run) { if ($element instanceof Run && $element->getFont() !== null) {
// rPr // rPr
$objWriter->startElement($prefix . 'rPr'); $objWriter->startElement($prefix . 'rPr');
// rFont // rFont
if ($element->getFont()->getName() !== null) {
$objWriter->startElement($prefix . 'rFont'); $objWriter->startElement($prefix . 'rFont');
$objWriter->writeAttribute('val', $element->getFont()->getName()); $objWriter->writeAttribute('val', $element->getFont()->getName());
$objWriter->endElement(); $objWriter->endElement();
}
// Bold // Bold
$objWriter->startElement($prefix . 'b'); $objWriter->startElement($prefix . 'b');
@ -166,19 +168,25 @@ class StringTable extends WriterPart
$objWriter->endElement(); $objWriter->endElement();
// Color // Color
if ($element->getFont()->getColor()->getARGB() !== null) {
$objWriter->startElement($prefix . 'color'); $objWriter->startElement($prefix . 'color');
$objWriter->writeAttribute('rgb', $element->getFont()->getColor()->getARGB()); $objWriter->writeAttribute('rgb', $element->getFont()->getColor()->getARGB());
$objWriter->endElement(); $objWriter->endElement();
}
// Size // Size
if ($element->getFont()->getSize() !== null) {
$objWriter->startElement($prefix . 'sz'); $objWriter->startElement($prefix . 'sz');
$objWriter->writeAttribute('val', $element->getFont()->getSize()); $objWriter->writeAttribute('val', (string) $element->getFont()->getSize());
$objWriter->endElement(); $objWriter->endElement();
}
// Underline // Underline
if ($element->getFont()->getUnderline() !== null) {
$objWriter->startElement($prefix . 'u'); $objWriter->startElement($prefix . 'u');
$objWriter->writeAttribute('val', $element->getFont()->getUnderline()); $objWriter->writeAttribute('val', $element->getFont()->getUnderline());
$objWriter->endElement(); $objWriter->endElement();
}
$objWriter->endElement(); $objWriter->endElement();
} }
@ -201,10 +209,10 @@ class StringTable extends WriterPart
*/ */
public function writeRichTextForCharts(XMLWriter $objWriter, $richText = null, $prefix = ''): void public function writeRichTextForCharts(XMLWriter $objWriter, $richText = null, $prefix = ''): void
{ {
if (!$richText instanceof RichText) { if (!($richText instanceof RichText)) {
$textRun = $richText; $textRun = $richText;
$richText = new RichText(); $richText = new RichText();
$run = $richText->createTextRun($textRun); $run = $richText->createTextRun($textRun ?? '');
$run->setFont(null); $run->setFont(null);
} }
@ -226,9 +234,9 @@ class StringTable extends WriterPart
} }
// Bold // Bold
$objWriter->writeAttribute('b', ($element->getFont()->getBold() ? 1 : 0)); $objWriter->writeAttribute('b', ($element->getFont()->getBold() ? '1' : '0'));
// Italic // Italic
$objWriter->writeAttribute('i', ($element->getFont()->getItalic() ? 1 : 0)); $objWriter->writeAttribute('i', ($element->getFont()->getItalic() ? '1' : '0'));
// Underline // Underline
$underlineType = $element->getFont()->getUnderline(); $underlineType = $element->getFont()->getUnderline();
switch ($underlineType) { switch ($underlineType) {
@ -241,7 +249,9 @@ class StringTable extends WriterPart
break; break;
} }
if ($underlineType !== null) {
$objWriter->writeAttribute('u', $underlineType); $objWriter->writeAttribute('u', $underlineType);
}
// Strikethrough // Strikethrough
$objWriter->writeAttribute('strike', ($element->getFont()->getStriketype() ?: 'noStrike')); $objWriter->writeAttribute('strike', ($element->getFont()->getStriketype() ?: 'noStrike'));
// Superscript/subscript // Superscript/subscript

View File

@ -40,7 +40,7 @@ class Style extends WriterPart
// numFmts // numFmts
$objWriter->startElement('numFmts'); $objWriter->startElement('numFmts');
$objWriter->writeAttribute('count', $this->getParentWriter()->getNumFmtHashTable()->count()); $objWriter->writeAttribute('count', (string) $this->getParentWriter()->getNumFmtHashTable()->count());
// numFmt // numFmt
for ($i = 0; $i < $this->getParentWriter()->getNumFmtHashTable()->count(); ++$i) { for ($i = 0; $i < $this->getParentWriter()->getNumFmtHashTable()->count(); ++$i) {
@ -51,54 +51,63 @@ class Style extends WriterPart
// fonts // fonts
$objWriter->startElement('fonts'); $objWriter->startElement('fonts');
$objWriter->writeAttribute('count', $this->getParentWriter()->getFontHashTable()->count()); $objWriter->writeAttribute('count', (string) $this->getParentWriter()->getFontHashTable()->count());
// font // font
for ($i = 0; $i < $this->getParentWriter()->getFontHashTable()->count(); ++$i) { for ($i = 0; $i < $this->getParentWriter()->getFontHashTable()->count(); ++$i) {
$this->writeFont($objWriter, $this->getParentWriter()->getFontHashTable()->getByIndex($i)); $thisfont = $this->getParentWriter()->getFontHashTable()->getByIndex($i);
if ($thisfont !== null) {
$this->writeFont($objWriter, $thisfont);
}
} }
$objWriter->endElement(); $objWriter->endElement();
// fills // fills
$objWriter->startElement('fills'); $objWriter->startElement('fills');
$objWriter->writeAttribute('count', $this->getParentWriter()->getFillHashTable()->count()); $objWriter->writeAttribute('count', (string) $this->getParentWriter()->getFillHashTable()->count());
// fill // fill
for ($i = 0; $i < $this->getParentWriter()->getFillHashTable()->count(); ++$i) { for ($i = 0; $i < $this->getParentWriter()->getFillHashTable()->count(); ++$i) {
$this->writeFill($objWriter, $this->getParentWriter()->getFillHashTable()->getByIndex($i)); $thisfill = $this->getParentWriter()->getFillHashTable()->getByIndex($i);
if ($thisfill !== null) {
$this->writeFill($objWriter, $thisfill);
}
} }
$objWriter->endElement(); $objWriter->endElement();
// borders // borders
$objWriter->startElement('borders'); $objWriter->startElement('borders');
$objWriter->writeAttribute('count', $this->getParentWriter()->getBordersHashTable()->count()); $objWriter->writeAttribute('count', (string) $this->getParentWriter()->getBordersHashTable()->count());
// border // border
for ($i = 0; $i < $this->getParentWriter()->getBordersHashTable()->count(); ++$i) { for ($i = 0; $i < $this->getParentWriter()->getBordersHashTable()->count(); ++$i) {
$this->writeBorder($objWriter, $this->getParentWriter()->getBordersHashTable()->getByIndex($i)); $thisborder = $this->getParentWriter()->getBordersHashTable()->getByIndex($i);
if ($thisborder !== null) {
$this->writeBorder($objWriter, $thisborder);
}
} }
$objWriter->endElement(); $objWriter->endElement();
// cellStyleXfs // cellStyleXfs
$objWriter->startElement('cellStyleXfs'); $objWriter->startElement('cellStyleXfs');
$objWriter->writeAttribute('count', 1); $objWriter->writeAttribute('count', '1');
// xf // xf
$objWriter->startElement('xf'); $objWriter->startElement('xf');
$objWriter->writeAttribute('numFmtId', 0); $objWriter->writeAttribute('numFmtId', '0');
$objWriter->writeAttribute('fontId', 0); $objWriter->writeAttribute('fontId', '0');
$objWriter->writeAttribute('fillId', 0); $objWriter->writeAttribute('fillId', '0');
$objWriter->writeAttribute('borderId', 0); $objWriter->writeAttribute('borderId', '0');
$objWriter->endElement(); $objWriter->endElement();
$objWriter->endElement(); $objWriter->endElement();
// cellXfs // cellXfs
$objWriter->startElement('cellXfs'); $objWriter->startElement('cellXfs');
$objWriter->writeAttribute('count', count($spreadsheet->getCellXfCollection())); $objWriter->writeAttribute('count', (string) count($spreadsheet->getCellXfCollection()));
// xf // xf
foreach ($spreadsheet->getCellXfCollection() as $cellXf) { foreach ($spreadsheet->getCellXfCollection() as $cellXf) {
@ -109,24 +118,27 @@ class Style extends WriterPart
// cellStyles // cellStyles
$objWriter->startElement('cellStyles'); $objWriter->startElement('cellStyles');
$objWriter->writeAttribute('count', 1); $objWriter->writeAttribute('count', '1');
// cellStyle // cellStyle
$objWriter->startElement('cellStyle'); $objWriter->startElement('cellStyle');
$objWriter->writeAttribute('name', 'Normal'); $objWriter->writeAttribute('name', 'Normal');
$objWriter->writeAttribute('xfId', 0); $objWriter->writeAttribute('xfId', '0');
$objWriter->writeAttribute('builtinId', 0); $objWriter->writeAttribute('builtinId', '0');
$objWriter->endElement(); $objWriter->endElement();
$objWriter->endElement(); $objWriter->endElement();
// dxfs // dxfs
$objWriter->startElement('dxfs'); $objWriter->startElement('dxfs');
$objWriter->writeAttribute('count', $this->getParentWriter()->getStylesConditionalHashTable()->count()); $objWriter->writeAttribute('count', (string) $this->getParentWriter()->getStylesConditionalHashTable()->count());
// dxf // dxf
for ($i = 0; $i < $this->getParentWriter()->getStylesConditionalHashTable()->count(); ++$i) { for ($i = 0; $i < $this->getParentWriter()->getStylesConditionalHashTable()->count(); ++$i) {
$this->writeCellStyleDxf($objWriter, $this->getParentWriter()->getStylesConditionalHashTable()->getByIndex($i)->getStyle()); $thisstyle = $this->getParentWriter()->getStylesConditionalHashTable()->getByIndex($i);
if ($thisstyle !== null) {
$this->writeCellStyleDxf($objWriter, $thisstyle->getStyle());
}
} }
$objWriter->endElement(); $objWriter->endElement();
@ -171,17 +183,19 @@ class Style extends WriterPart
// gradientFill // gradientFill
$objWriter->startElement('gradientFill'); $objWriter->startElement('gradientFill');
$objWriter->writeAttribute('type', $fill->getFillType()); $objWriter->writeAttribute('type', (string) $fill->getFillType());
$objWriter->writeAttribute('degree', $fill->getRotation()); $objWriter->writeAttribute('degree', (string) $fill->getRotation());
// stop // stop
$objWriter->startElement('stop'); $objWriter->startElement('stop');
$objWriter->writeAttribute('position', '0'); $objWriter->writeAttribute('position', '0');
// color // color
if ($fill->getStartColor()->getARGB() !== null) {
$objWriter->startElement('color'); $objWriter->startElement('color');
$objWriter->writeAttribute('rgb', $fill->getStartColor()->getARGB()); $objWriter->writeAttribute('rgb', $fill->getStartColor()->getARGB());
$objWriter->endElement(); $objWriter->endElement();
}
$objWriter->endElement(); $objWriter->endElement();
@ -190,9 +204,11 @@ class Style extends WriterPart
$objWriter->writeAttribute('position', '1'); $objWriter->writeAttribute('position', '1');
// color // color
if ($fill->getEndColor()->getARGB() !== null) {
$objWriter->startElement('color'); $objWriter->startElement('color');
$objWriter->writeAttribute('rgb', $fill->getEndColor()->getARGB()); $objWriter->writeAttribute('rgb', $fill->getEndColor()->getARGB());
$objWriter->endElement(); $objWriter->endElement();
}
$objWriter->endElement(); $objWriter->endElement();
@ -220,7 +236,7 @@ class Style extends WriterPart
// patternFill // patternFill
$objWriter->startElement('patternFill'); $objWriter->startElement('patternFill');
$objWriter->writeAttribute('patternType', $fill->getFillType()); $objWriter->writeAttribute('patternType', (string) $fill->getFillType());
if (self::writePatternColors($fill)) { if (self::writePatternColors($fill)) {
// fgColor // fgColor
@ -360,20 +376,20 @@ class Style extends WriterPart
{ {
// xf // xf
$objWriter->startElement('xf'); $objWriter->startElement('xf');
$objWriter->writeAttribute('xfId', 0); $objWriter->writeAttribute('xfId', '0');
$objWriter->writeAttribute('fontId', (int) $this->getParentWriter()->getFontHashTable()->getIndexForHashCode($style->getFont()->getHashCode())); $objWriter->writeAttribute('fontId', (string) (int) $this->getParentWriter()->getFontHashTable()->getIndexForHashCode($style->getFont()->getHashCode()));
if ($style->getQuotePrefix()) { if ($style->getQuotePrefix()) {
$objWriter->writeAttribute('quotePrefix', 1); $objWriter->writeAttribute('quotePrefix', '1');
} }
if ($style->getNumberFormat()->getBuiltInFormatCode() === false) { if ($style->getNumberFormat()->getBuiltInFormatCode() === false) {
$objWriter->writeAttribute('numFmtId', (int) ($this->getParentWriter()->getNumFmtHashTable()->getIndexForHashCode($style->getNumberFormat()->getHashCode()) + 164)); $objWriter->writeAttribute('numFmtId', (string) (int) ($this->getParentWriter()->getNumFmtHashTable()->getIndexForHashCode($style->getNumberFormat()->getHashCode()) + 164));
} else { } else {
$objWriter->writeAttribute('numFmtId', (int) $style->getNumberFormat()->getBuiltInFormatCode()); $objWriter->writeAttribute('numFmtId', (string) (int) $style->getNumberFormat()->getBuiltInFormatCode());
} }
$objWriter->writeAttribute('fillId', (int) $this->getParentWriter()->getFillHashTable()->getIndexForHashCode($style->getFill()->getHashCode())); $objWriter->writeAttribute('fillId', (string) (int) $this->getParentWriter()->getFillHashTable()->getIndexForHashCode($style->getFill()->getHashCode()));
$objWriter->writeAttribute('borderId', (int) $this->getParentWriter()->getBordersHashTable()->getIndexForHashCode($style->getBorders()->getHashCode())); $objWriter->writeAttribute('borderId', (string) (int) $this->getParentWriter()->getBordersHashTable()->getIndexForHashCode($style->getBorders()->getHashCode()));
// Apply styles? // Apply styles?
$objWriter->writeAttribute('applyFont', ($spreadsheet->getDefaultStyle()->getFont()->getHashCode() != $style->getFont()->getHashCode()) ? '1' : '0'); $objWriter->writeAttribute('applyFont', ($spreadsheet->getDefaultStyle()->getFont()->getHashCode() != $style->getFont()->getHashCode()) ? '1' : '0');
@ -387,25 +403,25 @@ class Style extends WriterPart
// alignment // alignment
$objWriter->startElement('alignment'); $objWriter->startElement('alignment');
$objWriter->writeAttribute('horizontal', $style->getAlignment()->getHorizontal()); $objWriter->writeAttribute('horizontal', (string) $style->getAlignment()->getHorizontal());
$objWriter->writeAttribute('vertical', $style->getAlignment()->getVertical()); $objWriter->writeAttribute('vertical', (string) $style->getAlignment()->getVertical());
$textRotation = 0; $textRotation = 0;
if ($style->getAlignment()->getTextRotation() >= 0) { if ($style->getAlignment()->getTextRotation() >= 0) {
$textRotation = $style->getAlignment()->getTextRotation(); $textRotation = $style->getAlignment()->getTextRotation();
} elseif ($style->getAlignment()->getTextRotation() < 0) { } else {
$textRotation = 90 - $style->getAlignment()->getTextRotation(); $textRotation = 90 - $style->getAlignment()->getTextRotation();
} }
$objWriter->writeAttribute('textRotation', $textRotation); $objWriter->writeAttribute('textRotation', (string) $textRotation);
$objWriter->writeAttribute('wrapText', ($style->getAlignment()->getWrapText() ? 'true' : 'false')); $objWriter->writeAttribute('wrapText', ($style->getAlignment()->getWrapText() ? 'true' : 'false'));
$objWriter->writeAttribute('shrinkToFit', ($style->getAlignment()->getShrinkToFit() ? 'true' : 'false')); $objWriter->writeAttribute('shrinkToFit', ($style->getAlignment()->getShrinkToFit() ? 'true' : 'false'));
if ($style->getAlignment()->getIndent() > 0) { if ($style->getAlignment()->getIndent() > 0) {
$objWriter->writeAttribute('indent', $style->getAlignment()->getIndent()); $objWriter->writeAttribute('indent', (string) $style->getAlignment()->getIndent());
} }
if ($style->getAlignment()->getReadOrder() > 0) { if ($style->getAlignment()->getReadOrder() > 0) {
$objWriter->writeAttribute('readingOrder', $style->getAlignment()->getReadOrder()); $objWriter->writeAttribute('readingOrder', (string) $style->getAlignment()->getReadOrder());
} }
$objWriter->endElement(); $objWriter->endElement();
@ -454,10 +470,10 @@ class Style extends WriterPart
$textRotation = 0; $textRotation = 0;
if ($style->getAlignment()->getTextRotation() >= 0) { if ($style->getAlignment()->getTextRotation() >= 0) {
$textRotation = $style->getAlignment()->getTextRotation(); $textRotation = $style->getAlignment()->getTextRotation();
} elseif ($style->getAlignment()->getTextRotation() < 0) { } else {
$textRotation = 90 - $style->getAlignment()->getTextRotation(); $textRotation = 90 - $style->getAlignment()->getTextRotation();
} }
$objWriter->writeAttribute('textRotation', $textRotation); $objWriter->writeAttribute('textRotation', (string) $textRotation);
} }
$objWriter->endElement(); $objWriter->endElement();
@ -465,7 +481,7 @@ class Style extends WriterPart
$this->writeBorder($objWriter, $style->getBorders()); $this->writeBorder($objWriter, $style->getBorders());
// protection // protection
if (($style->getProtection()->getLocked() !== null) || ($style->getProtection()->getHidden() !== null)) { if ((!empty($style->getProtection()->getLocked())) || (!empty($style->getProtection()->getHidden()))) {
if ( if (
$style->getProtection()->getLocked() !== Protection::PROTECTION_INHERIT || $style->getProtection()->getLocked() !== Protection::PROTECTION_INHERIT ||
$style->getProtection()->getHidden() !== Protection::PROTECTION_INHERIT $style->getProtection()->getHidden() !== Protection::PROTECTION_INHERIT
@ -503,6 +519,7 @@ class Style extends WriterPart
$objWriter->writeAttribute('style', $border->getBorderStyle()); $objWriter->writeAttribute('style', $border->getBorderStyle());
// color // color
if ($border->getColor()->getARGB() !== null) {
$objWriter->startElement('color'); $objWriter->startElement('color');
$objWriter->writeAttribute('rgb', $border->getColor()->getARGB()); $objWriter->writeAttribute('rgb', $border->getColor()->getARGB());
$objWriter->endElement(); $objWriter->endElement();
@ -510,21 +527,22 @@ class Style extends WriterPart
$objWriter->endElement(); $objWriter->endElement();
} }
} }
}
/** /**
* Write NumberFormat. * Write NumberFormat.
* *
* @param int $id Number Format identifier * @param int $id Number Format identifier
*/ */
private function writeNumFmt(XMLWriter $objWriter, NumberFormat $numberFormat, $id = 0): void private function writeNumFmt(XMLWriter $objWriter, ?NumberFormat $numberFormat, $id = 0): void
{ {
// Translate formatcode // Translate formatcode
$formatCode = $numberFormat->getFormatCode(); $formatCode = ($numberFormat === null) ? null : $numberFormat->getFormatCode();
// numFmt // numFmt
if ($formatCode !== null) { if ($formatCode !== null) {
$objWriter->startElement('numFmt'); $objWriter->startElement('numFmt');
$objWriter->writeAttribute('numFmtId', ($id + 164)); $objWriter->writeAttribute('numFmtId', (string) ($id + 164));
$objWriter->writeAttribute('formatCode', $formatCode); $objWriter->writeAttribute('formatCode', $formatCode);
$objWriter->endElement(); $objWriter->endElement();
} }