27 $this->objWriter->startElement(
'definedNames');
30 if (count($this->spreadsheet->getDefinedNames()) > 0) {
36 $sheetCount = $this->spreadsheet->getSheetCount();
37 for (
$i = 0;
$i < $sheetCount; ++
$i) {
48 $this->objWriter->endElement();
57 $definedNames = $this->spreadsheet->getDefinedNames();
58 foreach ($definedNames as $definedName) {
69 $this->objWriter->startElement(
'definedName');
70 $this->objWriter->writeAttribute(
'name', $pDefinedName->
getName());
72 $this->objWriter->writeAttribute(
80 $this->objWriter->writeRawData($definedRange);
82 $this->objWriter->endElement();
92 if (!empty($autoFilterRange)) {
93 $this->objWriter->startElement(
'definedName');
94 $this->objWriter->writeAttribute(
'name',
'_xlnm._FilterDatabase');
95 $this->objWriter->writeAttribute(
'localSheetId', $pSheetId);
96 $this->objWriter->writeAttribute(
'hidden',
'1');
106 $range = implode(
':', $range);
108 $this->objWriter->writeRawData(
'\'' . str_replace(
"'",
"''", $pSheet->
getTitle()) .
'\'!
' . $range); 110 $this->objWriter->endElement(); 117 private function writeNamedRangeForPrintTitles(Worksheet $pSheet, int $pSheetId = 0): void 119 // NamedRange for PrintTitles 120 if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet() || $pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) { 121 $this->objWriter->startElement('definedName
'); 122 $this->objWriter->writeAttribute('name
', '_xlnm.Print_Titles
'); 123 $this->objWriter->writeAttribute('localSheetId
', $pSheetId); 129 if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) { 130 $repeat = $pSheet->getPageSetup()->getColumnsToRepeatAtLeft(); 132 $settingString .= '\
'' . str_replace(
"'",
"''", $pSheet->
getTitle()) .
'\'!$
' . $repeat[0] . ':$
' . $repeat[1]; 136 if ($pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) { 137 if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) { 138 $settingString .= ',
'; 141 $repeat = $pSheet->getPageSetup()->getRowsToRepeatAtTop(); 143 $settingString .= '\
'' . str_replace(
"'",
"''", $pSheet->
getTitle()) .
'\'!$
' . $repeat[0] . ':$
' . $repeat[1]; 146 $this->objWriter->writeRawData($settingString); 148 $this->objWriter->endElement(); 155 private function writeNamedRangeForPrintArea(Worksheet $pSheet, int $pSheetId = 0): void 157 // NamedRange for PrintArea 158 if ($pSheet->getPageSetup()->isPrintAreaSet()) { 159 $this->objWriter->startElement('definedName
'); 160 $this->objWriter->writeAttribute('name
', '_xlnm.Print_Area
'); 161 $this->objWriter->writeAttribute('localSheetId
', $pSheetId); 164 $printArea = Coordinate::splitRange($pSheet->getPageSetup()->getPrintArea()); 167 foreach ($printArea as $printAreaRect) { 168 $printAreaRect[0] = Coordinate::absoluteReference($printAreaRect[0]); 169 $printAreaRect[1] = Coordinate::absoluteReference($printAreaRect[1]); 170 $chunks[] = '\
'' . str_replace(
"'",
"''", $pSheet->
getTitle()) .
'\'!
' . implode(':
', $printAreaRect); 173 $this->objWriter->writeRawData(implode(',
', $chunks)); 175 $this->objWriter->endElement(); 179 private function getDefinedRange(DefinedName $pDefinedName): string 181 $definedRange = $pDefinedName->getValue(); 182 $splitCount = preg_match_all( 183 '/
' . Calculation::CALCULATION_REGEXP_CELLREF_RELATIVE . '/mui
', 189 $lengths = array_map('strlen
', array_column($splitRanges[0], 0)); 190 $offsets = array_column($splitRanges[0], 1); 192 $worksheets = $splitRanges[2]; 193 $columns = $splitRanges[6]; 194 $rows = $splitRanges[7]; 196 while ($splitCount > 0) { 198 $length = $lengths[$splitCount]; 199 $offset = $offsets[$splitCount]; 200 $worksheet = $worksheets[$splitCount][0]; 201 $column = $columns[$splitCount][0]; 202 $row = $rows[$splitCount][0]; 205 if (empty($worksheet)) { 206 if (($offset === 0) || ($definedRange[$offset - 1] !== ':
')) { 207 // We should have a worksheet 208 $worksheet = $pDefinedName->getWorksheet() ? $pDefinedName->getWorksheet()->getTitle() : null; 211 $worksheet = str_replace("''", "'", trim($worksheet, "'")); 214 if (!empty($worksheet)) { 215 $newRange = "'" . str_replace("'", "''", $worksheet) . "'!
"; 217 $newRange = "{$newRange}{$column}{
$row}
"; 219 $definedRange = substr($definedRange, 0, $offset) . $newRange . substr($definedRange, $offset + $length); 222 if (substr($definedRange, 0, 1) === '=') { 223 $definedRange = substr($definedRange, 1); 226 return $definedRange; static splitRange($pRange)
Split range into coordinate strings.
writeNamedRangeForPrintTitles(Worksheet $pSheet, int $pSheetId=0)
Write Defined Name for PrintTitles.
writeNamedRangeForAutofilter(Worksheet $pSheet, int $pSheetId=0)
Write Defined Name for autoFilter.
getLocalOnly()
Get localOnly.
writeDefinedName(DefinedName $pDefinedName)
Write Defined Name for named range.
static extractSheetTitle($pRange, $returnRange=false)
Extract worksheet title from range.
getDefinedRange(DefinedName $pDefinedName)
writeNamedRangeForPrintArea(Worksheet $pSheet, int $pSheetId=0)
Write Defined Name for PrintTitles.
writeNamedRangesAndFormulae()
Write defined names.
__construct(XMLWriter $objWriter, Spreadsheet $spreadsheet)
static absoluteCoordinate($pCoordinateString)
Make string coordinate absolute.
getAutoFilter()
Get Autofilter.