예제 #1
0
 /**
  * Convert the height of a cell from user's units to pixels. By interpolation
  * the relationship is: y = 4/3x. If the height hasn't been set by the user we
  * use the default value. If the row is hidden we use a value of zero.
  *
  * @param \PHPExcel\Worksheet $sheet The sheet
  * @param integer $row The row index (1-based)
  * @return integer The width in pixels
  */
 public static function sizeRow($sheet, $row = 1)
 {
     // default font of the workbook
     $font = $sheet->getParent()->getDefaultStyle()->getFont();
     $rowDimensions = $sheet->getRowDimensions();
     // first find the true row height in pixels (uncollapsed and unhidden)
     if (isset($rowDimensions[$row]) and $rowDimensions[$row]->getRowHeight() != -1) {
         // then we have a row dimension
         $rowDimension = $rowDimensions[$row];
         $rowHeight = $rowDimension->getRowHeight();
         $pixelRowHeight = (int) ceil(4 * $rowHeight / 3);
         // here we assume Arial 10
     } elseif ($sheet->getDefaultRowDimension()->getRowHeight() != -1) {
         // then we have a default row dimension with explicit height
         $defaultRowDimension = $sheet->getDefaultRowDimension();
         $rowHeight = $defaultRowDimension->getRowHeight();
         $pixelRowHeight = \PHPExcel\Shared\Drawing::pointsToPixels($rowHeight);
     } else {
         // we don't even have any default row dimension. Height depends on default font
         $pointRowHeight = \PHPExcel\Shared\Font::getDefaultRowHeightByFont($font);
         $pixelRowHeight = \PHPExcel\Shared\Font::fontSizeToPixels($pointRowHeight);
     }
     // now find the effective row height in pixels
     if (isset($rowDimensions[$row]) and !$rowDimensions[$row]->getVisible()) {
         $effectivePixelRowHeight = 0;
     } else {
         $effectivePixelRowHeight = $pixelRowHeight;
     }
     return $effectivePixelRowHeight;
 }
예제 #2
0
 public function refresh(\PHPExcel\Worksheet $worksheet, $flatten = true)
 {
     if ($this->dataSource !== null) {
         $calcEngine = \PHPExcel\Calculation::getInstance($worksheet->getParent());
         $newDataValues = \PHPExcel\Calculation::unwrapResult($calcEngine->_calculateFormulaValue('=' . $this->dataSource, null, $worksheet->getCell('A1')));
         if ($flatten) {
             $this->dataValues = \PHPExcel\Calculation\Functions::flattenArray($newDataValues);
             foreach ($this->dataValues as &$dataValue) {
                 if (!empty($dataValue) && $dataValue[0] == '#') {
                     $dataValue = 0.0;
                 }
             }
             unset($dataValue);
         } else {
             $cellRange = explode('!', $this->dataSource);
             if (count($cellRange) > 1) {
                 list(, $cellRange) = $cellRange;
             }
             $dimensions = \PHPExcel\Cell::rangeDimension(str_replace('$', '', $cellRange));
             if ($dimensions[0] == 1 || $dimensions[1] == 1) {
                 $this->dataValues = \PHPExcel\Calculation\Functions::flattenArray($newDataValues);
             } else {
                 $newArray = array_values(array_shift($newDataValues));
                 foreach ($newArray as $i => $newDataSet) {
                     $newArray[$i] = array($newDataSet);
                 }
                 foreach ($newDataValues as $newDataSet) {
                     $i = 0;
                     foreach ($newDataSet as $newDataVal) {
                         array_unshift($newArray[$i++], $newDataVal);
                     }
                 }
                 $this->dataValues = $newArray;
             }
         }
         $this->pointCount = count($this->dataValues);
     }
 }
예제 #3
0
 /**
  * Write BIFF record Window2.
  */
 private function writeWindow2()
 {
     $record = 0x23e;
     // Record identifier
     $length = 0x12;
     $grbit = 0xb6;
     // Option flags
     $rwTop = 0x0;
     // Top row visible in window
     $colLeft = 0x0;
     // Leftmost column visible in window
     // The options flags that comprise $grbit
     $fDspFmla = 0;
     // 0 - bit
     $fDspGrid = $this->phpSheet->getShowGridlines() ? 1 : 0;
     // 1
     $fDspRwCol = $this->phpSheet->getShowRowColHeaders() ? 1 : 0;
     // 2
     $fFrozen = $this->phpSheet->getFreezePane() ? 1 : 0;
     // 3
     $fDspZeros = 1;
     // 4
     $fDefaultHdr = 1;
     // 5
     $fArabic = $this->phpSheet->getRightToLeft() ? 1 : 0;
     // 6
     $fDspGuts = $this->outlineOn;
     // 7
     $fFrozenNoSplit = 0;
     // 0 - bit
     // no support in PHPExcel for selected sheet, therefore sheet is only selected if it is the active sheet
     $fSelected = $this->phpSheet === $this->phpSheet->getParent()->getActiveSheet() ? 1 : 0;
     $fPaged = 1;
     // 2
     $fPageBreakPreview = $this->phpSheet->getSheetView()->getView() === \PHPExcel\Worksheet\SheetView::SHEETVIEW_PAGE_BREAK_PREVIEW;
     $grbit = $fDspFmla;
     $grbit |= $fDspGrid << 1;
     $grbit |= $fDspRwCol << 2;
     $grbit |= $fFrozen << 3;
     $grbit |= $fDspZeros << 4;
     $grbit |= $fDefaultHdr << 5;
     $grbit |= $fArabic << 6;
     $grbit |= $fDspGuts << 7;
     $grbit |= $fFrozenNoSplit << 8;
     $grbit |= $fSelected << 9;
     $grbit |= $fPaged << 10;
     $grbit |= $fPageBreakPreview << 11;
     $header = pack("vv", $record, $length);
     $data = pack("vvv", $grbit, $rwTop, $colLeft);
     // FIXME !!!
     $rgbHdr = 0x40;
     // Row/column heading and gridline color index
     $zoom_factor_page_break = $fPageBreakPreview ? $this->phpSheet->getSheetView()->getZoomScale() : 0x0;
     $zoom_factor_normal = $this->phpSheet->getSheetView()->getZoomScaleNormal();
     $data .= pack("vvvvV", $rgbHdr, 0x0, $zoom_factor_page_break, $zoom_factor_normal, 0x0);
     $this->append($header . $data);
 }
예제 #4
0
 /**
  * Write SheetPr
  *
  * @param    \PHPExcel\Shared\XMLWriter        $objWriter        XML Writer
  * @param    \PHPExcel\Worksheet                $pSheet            Worksheet
  * @throws    \PHPExcel\Writer\Exception
  */
 private function writeSheetPr(\PHPExcel\Shared\XMLWriter $objWriter = null, \PHPExcel\Worksheet $pSheet = null)
 {
     // sheetPr
     $objWriter->startElement('sheetPr');
     //$objWriter->writeAttribute('codeName',        $pSheet->getTitle());
     if ($pSheet->getParent()->hasMacros()) {
         //if the workbook have macros, we need to have codeName for the sheet
         if ($pSheet->hasCodeName() == false) {
             $pSheet->setCodeName($pSheet->getTitle());
         }
         $objWriter->writeAttribute('codeName', $pSheet->getCodeName());
     }
     $autoFilterRange = $pSheet->getAutoFilter()->getRange();
     if (!empty($autoFilterRange)) {
         $objWriter->writeAttribute('filterMode', 1);
         $pSheet->getAutoFilter()->showHideRows();
     }
     // tabColor
     if ($pSheet->isTabColorSet()) {
         $objWriter->startElement('tabColor');
         $objWriter->writeAttribute('rgb', $pSheet->getTabColor()->getARGB());
         $objWriter->endElement();
     }
     // outlinePr
     $objWriter->startElement('outlinePr');
     $objWriter->writeAttribute('summaryBelow', $pSheet->getShowSummaryBelow() ? '1' : '0');
     $objWriter->writeAttribute('summaryRight', $pSheet->getShowSummaryRight() ? '1' : '0');
     $objWriter->endElement();
     // pageSetUpPr
     if ($pSheet->getPageSetup()->getFitToPage()) {
         $objWriter->startElement('pageSetUpPr');
         $objWriter->writeAttribute('fitToPage', '1');
         $objWriter->endElement();
     }
     $objWriter->endElement();
 }