예제 #1
0
 /**
  * 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);
     }
 }
예제 #2
0
 /**
  * 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();
     }
 }