/** * Write the HORIZONTALPAGEBREAKS and VERTICALPAGEBREAKS BIFF records. */ private function writeBreaks() { // initialize $vbreaks = array(); $hbreaks = array(); foreach ($this->phpSheet->getBreaks() as $cell => $breakType) { // Fetch coordinates $coordinates = \PHPExcel\Cell::coordinateFromString($cell); // Decide what to do by the type of break switch ($breakType) { case \PHPExcel\Worksheet::BREAK_COLUMN: // Add to list of vertical breaks $vbreaks[] = \PHPExcel\Cell::columnIndexFromString($coordinates[0]) - 1; break; case \PHPExcel\Worksheet::BREAK_ROW: // Add to list of horizontal breaks $hbreaks[] = $coordinates[1]; break; case \PHPExcel\Worksheet::BREAK_NONE: default: // Nothing to do break; } } //horizontal page breaks if (!empty($hbreaks)) { // Sort and filter array of page breaks sort($hbreaks, SORT_NUMERIC); if ($hbreaks[0] == 0) { // don't use first break if it's 0 array_shift($hbreaks); } $record = 0x1b; // Record identifier $cbrk = count($hbreaks); // Number of page breaks $length = 2 + 6 * $cbrk; // Bytes to follow $header = pack("vv", $record, $length); $data = pack("v", $cbrk); // Append each page break foreach ($hbreaks as $hbreak) { $data .= pack("vvv", $hbreak, 0x0, 0xff); } $this->append($header . $data); } // vertical page breaks if (!empty($vbreaks)) { // 1000 vertical pagebreaks appears to be an internal Excel 5 limit. // It is slightly higher in Excel 97/200, approx. 1026 $vbreaks = array_slice($vbreaks, 0, 1000); // Sort and filter array of page breaks sort($vbreaks, SORT_NUMERIC); if ($vbreaks[0] == 0) { // don't use first break if it's 0 array_shift($vbreaks); } $record = 0x1a; // Record identifier $cbrk = count($vbreaks); // Number of page breaks $length = 2 + 6 * $cbrk; // Bytes to follow $header = pack("vv", $record, $length); $data = pack("v", $cbrk); // Append each page break foreach ($vbreaks as $vbreak) { $data .= pack("vvv", $vbreak, 0x0, 0xffff); } $this->append($header . $data); } }
/** * Write Breaks * * @param \PHPExcel\Shared\XMLWriter $objWriter XML Writer * @param \PHPExcel\Worksheet $pSheet Worksheet * @throws \PHPExcel\Writer\Exception */ private function writeBreaks(\PHPExcel\Shared\XMLWriter $objWriter = null, \PHPExcel\Worksheet $pSheet = null) { // Get row and column breaks $aRowBreaks = array(); $aColumnBreaks = array(); foreach ($pSheet->getBreaks() as $cell => $breakType) { if ($breakType == \PHPExcel\Worksheet::BREAK_ROW) { $aRowBreaks[] = $cell; } elseif ($breakType == \PHPExcel\Worksheet::BREAK_COLUMN) { $aColumnBreaks[] = $cell; } } // rowBreaks if (!empty($aRowBreaks)) { $objWriter->startElement('rowBreaks'); $objWriter->writeAttribute('count', count($aRowBreaks)); $objWriter->writeAttribute('manualBreakCount', count($aRowBreaks)); foreach ($aRowBreaks as $cell) { $coords = \PHPExcel\Cell::coordinateFromString($cell); $objWriter->startElement('brk'); $objWriter->writeAttribute('id', $coords[1]); $objWriter->writeAttribute('man', '1'); $objWriter->endElement(); } $objWriter->endElement(); } // Second, write column breaks if (!empty($aColumnBreaks)) { $objWriter->startElement('colBreaks'); $objWriter->writeAttribute('count', count($aColumnBreaks)); $objWriter->writeAttribute('manualBreakCount', count($aColumnBreaks)); foreach ($aColumnBreaks as $cell) { $coords = \PHPExcel\Cell::coordinateFromString($cell); $objWriter->startElement('brk'); $objWriter->writeAttribute('id', \PHPExcel\Cell::columnIndexFromString($coords[0]) - 1); $objWriter->writeAttribute('man', '1'); $objWriter->endElement(); } $objWriter->endElement(); } }