private function PHPExcel_Writer_Excel5::_buildWorksheetEschers in Loft Data Grids 6.2
Same name and namespace in other branches
- 7.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5.php \PHPExcel_Writer_Excel5::_buildWorksheetEschers()
* Build the Worksheet Escher objects *
1 call to PHPExcel_Writer_Excel5::_buildWorksheetEschers()
- PHPExcel_Writer_Excel5::save in vendor/
phpoffice/ phpexcel/ Classes/ PHPExcel/ Writer/ Excel5.php - * Save PHPExcel to file * *
File
- vendor/
phpoffice/ phpexcel/ Classes/ PHPExcel/ Writer/ Excel5.php, line 248
Class
- PHPExcel_Writer_Excel5
- PHPExcel_Writer_Excel5
Code
private function _buildWorksheetEschers() {
// 1-based index to BstoreContainer
$blipIndex = 0;
$lastReducedSpId = 0;
$lastSpId = 0;
foreach ($this->_phpExcel
->getAllsheets() as $sheet) {
// sheet index
$sheetIndex = $sheet
->getParent()
->getIndex($sheet);
$escher = null;
// check if there are any shapes for this sheet
$filterRange = $sheet
->getAutoFilter()
->getRange();
if (count($sheet
->getDrawingCollection()) == 0 && empty($filterRange)) {
continue;
}
// create intermediate Escher object
$escher = new PHPExcel_Shared_Escher();
// dgContainer
$dgContainer = new PHPExcel_Shared_Escher_DgContainer();
// set the drawing index (we use sheet index + 1)
$dgId = $sheet
->getParent()
->getIndex($sheet) + 1;
$dgContainer
->setDgId($dgId);
$escher
->setDgContainer($dgContainer);
// spgrContainer
$spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer();
$dgContainer
->setSpgrContainer($spgrContainer);
// add one shape which is the group shape
$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
$spContainer
->setSpgr(true);
$spContainer
->setSpType(0);
$spContainer
->setSpId($sheet
->getParent()
->getIndex($sheet) + 1 << 10);
$spgrContainer
->addChild($spContainer);
// add the shapes
$countShapes[$sheetIndex] = 0;
// count number of shapes (minus group shape), in sheet
foreach ($sheet
->getDrawingCollection() as $drawing) {
++$blipIndex;
++$countShapes[$sheetIndex];
// add the shape
$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
// set the shape type
$spContainer
->setSpType(0x4b);
// set the shape flag
$spContainer
->setSpFlag(0x2);
// set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index)
$reducedSpId = $countShapes[$sheetIndex];
$spId = $reducedSpId | $sheet
->getParent()
->getIndex($sheet) + 1 << 10;
$spContainer
->setSpId($spId);
// keep track of last reducedSpId
$lastReducedSpId = $reducedSpId;
// keep track of last spId
$lastSpId = $spId;
// set the BLIP index
$spContainer
->setOPT(0x4104, $blipIndex);
// set coordinates and offsets, client anchor
$coordinates = $drawing
->getCoordinates();
$offsetX = $drawing
->getOffsetX();
$offsetY = $drawing
->getOffsetY();
$width = $drawing
->getWidth();
$height = $drawing
->getHeight();
$twoAnchor = PHPExcel_Shared_Excel5::oneAnchor2twoAnchor($sheet, $coordinates, $offsetX, $offsetY, $width, $height);
$spContainer
->setStartCoordinates($twoAnchor['startCoordinates']);
$spContainer
->setStartOffsetX($twoAnchor['startOffsetX']);
$spContainer
->setStartOffsetY($twoAnchor['startOffsetY']);
$spContainer
->setEndCoordinates($twoAnchor['endCoordinates']);
$spContainer
->setEndOffsetX($twoAnchor['endOffsetX']);
$spContainer
->setEndOffsetY($twoAnchor['endOffsetY']);
$spgrContainer
->addChild($spContainer);
}
// AutoFilters
if (!empty($filterRange)) {
$rangeBounds = PHPExcel_Cell::rangeBoundaries($filterRange);
$iNumColStart = $rangeBounds[0][0];
$iNumColEnd = $rangeBounds[1][0];
$iInc = $iNumColStart;
while ($iInc <= $iNumColEnd) {
++$countShapes[$sheetIndex];
// create an Drawing Object for the dropdown
$oDrawing = new PHPExcel_Worksheet_BaseDrawing();
// get the coordinates of drawing
$cDrawing = PHPExcel_Cell::stringFromColumnIndex($iInc - 1) . $rangeBounds[0][1];
$oDrawing
->setCoordinates($cDrawing);
$oDrawing
->setWorksheet($sheet);
// add the shape
$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
// set the shape type
$spContainer
->setSpType(0xc9);
// set the shape flag
$spContainer
->setSpFlag(0x1);
// set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index)
$reducedSpId = $countShapes[$sheetIndex];
$spId = $reducedSpId | $sheet
->getParent()
->getIndex($sheet) + 1 << 10;
$spContainer
->setSpId($spId);
// keep track of last reducedSpId
$lastReducedSpId = $reducedSpId;
// keep track of last spId
$lastSpId = $spId;
$spContainer
->setOPT(0x7f, 0x1040104);
// Protection -> fLockAgainstGrouping
$spContainer
->setOPT(0xbf, 0x80008);
// Text -> fFitTextToShape
$spContainer
->setOPT(0x1bf, 0x10000);
// Fill Style -> fNoFillHitTest
$spContainer
->setOPT(0x1ff, 0x80000);
// Line Style -> fNoLineDrawDash
$spContainer
->setOPT(0x3bf, 0xa0000);
// Group Shape -> fPrint
// set coordinates and offsets, client anchor
$endCoordinates = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::stringFromColumnIndex($iInc - 1));
$endCoordinates .= $rangeBounds[0][1] + 1;
$spContainer
->setStartCoordinates($cDrawing);
$spContainer
->setStartOffsetX(0);
$spContainer
->setStartOffsetY(0);
$spContainer
->setEndCoordinates($endCoordinates);
$spContainer
->setEndOffsetX(0);
$spContainer
->setEndOffsetY(0);
$spgrContainer
->addChild($spContainer);
$iInc++;
}
}
// identifier clusters, used for workbook Escher object
$this->_IDCLs[$dgId] = $lastReducedSpId;
// set last shape index
$dgContainer
->setLastSpId($lastSpId);
// set the Escher object
$this->_writerWorksheets[$sheetIndex]
->setEscher($escher);
}
}