예제 #1
0
 /**
  * Write drawings to XML format
  *
  * @param     \PHPExcel\Shared\XMLWriter            $objWriter         XML Writer
  * @param     \PHPExcel\Worksheet\BaseDrawing        $pDrawing
  * @param     int                                    $pRelationId
  * @throws     \PHPExcel\Writer\Exception
  */
 public function writeDrawing(\PHPExcel\Shared\XMLWriter $objWriter = null, \PHPExcel\Worksheet\BaseDrawing $pDrawing = null, $pRelationId = -1)
 {
     if ($pRelationId >= 0) {
         // xdr:oneCellAnchor
         $objWriter->startElement('xdr:oneCellAnchor');
         // Image location
         $aCoordinates = \PHPExcel\Cell::coordinateFromString($pDrawing->getCoordinates());
         $aCoordinates[0] = \PHPExcel\Cell::columnIndexFromString($aCoordinates[0]);
         // xdr:from
         $objWriter->startElement('xdr:from');
         $objWriter->writeElement('xdr:col', $aCoordinates[0] - 1);
         $objWriter->writeElement('xdr:colOff', \PHPExcel\Shared\Drawing::pixelsToEMU($pDrawing->getOffsetX()));
         $objWriter->writeElement('xdr:row', $aCoordinates[1] - 1);
         $objWriter->writeElement('xdr:rowOff', \PHPExcel\Shared\Drawing::pixelsToEMU($pDrawing->getOffsetY()));
         $objWriter->endElement();
         // xdr:ext
         $objWriter->startElement('xdr:ext');
         $objWriter->writeAttribute('cx', \PHPExcel\Shared\Drawing::pixelsToEMU($pDrawing->getWidth()));
         $objWriter->writeAttribute('cy', \PHPExcel\Shared\Drawing::pixelsToEMU($pDrawing->getHeight()));
         $objWriter->endElement();
         // xdr:pic
         $objWriter->startElement('xdr:pic');
         // xdr:nvPicPr
         $objWriter->startElement('xdr:nvPicPr');
         // xdr:cNvPr
         $objWriter->startElement('xdr:cNvPr');
         $objWriter->writeAttribute('id', $pRelationId);
         $objWriter->writeAttribute('name', $pDrawing->getName());
         $objWriter->writeAttribute('descr', $pDrawing->getDescription());
         $objWriter->endElement();
         // xdr:cNvPicPr
         $objWriter->startElement('xdr:cNvPicPr');
         // a:picLocks
         $objWriter->startElement('a:picLocks');
         $objWriter->writeAttribute('noChangeAspect', '1');
         $objWriter->endElement();
         $objWriter->endElement();
         $objWriter->endElement();
         // xdr:blipFill
         $objWriter->startElement('xdr:blipFill');
         // a:blip
         $objWriter->startElement('a:blip');
         $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
         $objWriter->writeAttribute('r:embed', 'rId' . $pRelationId);
         $objWriter->endElement();
         // a:stretch
         $objWriter->startElement('a:stretch');
         $objWriter->writeElement('a:fillRect', null);
         $objWriter->endElement();
         $objWriter->endElement();
         // xdr:spPr
         $objWriter->startElement('xdr:spPr');
         // a:xfrm
         $objWriter->startElement('a:xfrm');
         $objWriter->writeAttribute('rot', \PHPExcel\Shared\Drawing::degreesToAngle($pDrawing->getRotation()));
         $objWriter->endElement();
         // a:prstGeom
         $objWriter->startElement('a:prstGeom');
         $objWriter->writeAttribute('prst', 'rect');
         // a:avLst
         $objWriter->writeElement('a:avLst', null);
         $objWriter->endElement();
         //                        // a:solidFill
         //                        $objWriter->startElement('a:solidFill');
         //                            // a:srgbClr
         //                            $objWriter->startElement('a:srgbClr');
         //                            $objWriter->writeAttribute('val', 'FFFFFF');
         ///* SHADE
         //                                // a:shade
         //                                $objWriter->startElement('a:shade');
         //                                $objWriter->writeAttribute('val', '85000');
         //                                $objWriter->endElement();
         //*/
         //                            $objWriter->endElement();
         //                        $objWriter->endElement();
         /*
                     // a:ln
                     $objWriter->startElement('a:ln');
                     $objWriter->writeAttribute('w', '88900');
                     $objWriter->writeAttribute('cap', 'sq');
         
                         // a:solidFill
                         $objWriter->startElement('a:solidFill');
         
                             // a:srgbClr
                             $objWriter->startElement('a:srgbClr');
                             $objWriter->writeAttribute('val', 'FFFFFF');
                             $objWriter->endElement();
         
                         $objWriter->endElement();
         
                         // a:miter
                         $objWriter->startElement('a:miter');
                         $objWriter->writeAttribute('lim', '800000');
                         $objWriter->endElement();
         
                     $objWriter->endElement();
         */
         if ($pDrawing->getShadow()->getVisible()) {
             // a:effectLst
             $objWriter->startElement('a:effectLst');
             // a:outerShdw
             $objWriter->startElement('a:outerShdw');
             $objWriter->writeAttribute('blurRad', \PHPExcel\Shared\Drawing::pixelsToEMU($pDrawing->getShadow()->getBlurRadius()));
             $objWriter->writeAttribute('dist', \PHPExcel\Shared\Drawing::pixelsToEMU($pDrawing->getShadow()->getDistance()));
             $objWriter->writeAttribute('dir', \PHPExcel\Shared\Drawing::degreesToAngle($pDrawing->getShadow()->getDirection()));
             $objWriter->writeAttribute('algn', $pDrawing->getShadow()->getAlignment());
             $objWriter->writeAttribute('rotWithShape', '0');
             // a:srgbClr
             $objWriter->startElement('a:srgbClr');
             $objWriter->writeAttribute('val', $pDrawing->getShadow()->getColor()->getRGB());
             // a:alpha
             $objWriter->startElement('a:alpha');
             $objWriter->writeAttribute('val', $pDrawing->getShadow()->getAlpha() * 1000);
             $objWriter->endElement();
             $objWriter->endElement();
             $objWriter->endElement();
             $objWriter->endElement();
         }
         /*
         
                         // a:scene3d
                         $objWriter->startElement('a:scene3d');
         
                             // a:camera
                             $objWriter->startElement('a:camera');
                             $objWriter->writeAttribute('prst', 'orthographicFront');
                             $objWriter->endElement();
         
                             // a:lightRig
                             $objWriter->startElement('a:lightRig');
                             $objWriter->writeAttribute('rig', 'twoPt');
                             $objWriter->writeAttribute('dir', 't');
         
                                 // a:rot
                                 $objWriter->startElement('a:rot');
                                 $objWriter->writeAttribute('lat', '0');
                                 $objWriter->writeAttribute('lon', '0');
                                 $objWriter->writeAttribute('rev', '0');
                                 $objWriter->endElement();
         
                             $objWriter->endElement();
         
                         $objWriter->endElement();
         */
         /*
                         // a:sp3d
                         $objWriter->startElement('a:sp3d');
         
                             // a:bevelT
                             $objWriter->startElement('a:bevelT');
                             $objWriter->writeAttribute('w', '25400');
                             $objWriter->writeAttribute('h', '19050');
                             $objWriter->endElement();
         
                             // a:contourClr
                             $objWriter->startElement('a:contourClr');
         
                                 // a:srgbClr
                                 $objWriter->startElement('a:srgbClr');
                                 $objWriter->writeAttribute('val', 'FFFFFF');
                                 $objWriter->endElement();
         
                             $objWriter->endElement();
         
                         $objWriter->endElement();
         */
         $objWriter->endElement();
         $objWriter->endElement();
         // xdr:clientData
         $objWriter->writeElement('xdr:clientData', null);
         $objWriter->endElement();
     } else {
         throw new \PHPExcel\Writer\Exception("Invalid parameters passed.");
     }
 }
예제 #2
0
 /**
  * Write VML comment to XML format
  *
  * @param     \PHPExcel\Shared\XMLWriter        $objWriter             XML Writer
  * @param    string                            $pCellReference        Cell reference
  * @param     \PHPExcel\Comment                $pComment            Comment
  * @throws     \PHPExcel\Writer\Exception
  */
 private function writeVMLComment(\PHPExcel\Shared\XMLWriter $objWriter = null, $pCellReference = 'A1', \PHPExcel\Comment $pComment = null)
 {
     // Metadata
     list($column, $row) = \PHPExcel\Cell::coordinateFromString($pCellReference);
     $column = \PHPExcel\Cell::columnIndexFromString($column);
     $id = 1024 + $column + $row;
     $id = substr($id, 0, 4);
     // v:shape
     $objWriter->startElement('v:shape');
     $objWriter->writeAttribute('id', '_x0000_s' . $id);
     $objWriter->writeAttribute('type', '#_x0000_t202');
     $objWriter->writeAttribute('style', 'position:absolute;margin-left:' . $pComment->getMarginLeft() . ';margin-top:' . $pComment->getMarginTop() . ';width:' . $pComment->getWidth() . ';height:' . $pComment->getHeight() . ';z-index:1;visibility:' . ($pComment->getVisible() ? 'visible' : 'hidden'));
     $objWriter->writeAttribute('fillcolor', '#' . $pComment->getFillColor()->getRGB());
     $objWriter->writeAttribute('o:insetmode', 'auto');
     // v:fill
     $objWriter->startElement('v:fill');
     $objWriter->writeAttribute('color2', '#' . $pComment->getFillColor()->getRGB());
     $objWriter->endElement();
     // v:shadow
     $objWriter->startElement('v:shadow');
     $objWriter->writeAttribute('on', 't');
     $objWriter->writeAttribute('color', 'black');
     $objWriter->writeAttribute('obscured', 't');
     $objWriter->endElement();
     // v:path
     $objWriter->startElement('v:path');
     $objWriter->writeAttribute('o:connecttype', 'none');
     $objWriter->endElement();
     // v:textbox
     $objWriter->startElement('v:textbox');
     $objWriter->writeAttribute('style', 'mso-direction-alt:auto');
     // div
     $objWriter->startElement('div');
     $objWriter->writeAttribute('style', 'text-align:left');
     $objWriter->endElement();
     $objWriter->endElement();
     // x:ClientData
     $objWriter->startElement('x:ClientData');
     $objWriter->writeAttribute('ObjectType', 'Note');
     // x:MoveWithCells
     $objWriter->writeElement('x:MoveWithCells', '');
     // x:SizeWithCells
     $objWriter->writeElement('x:SizeWithCells', '');
     // x:Anchor
     //$objWriter->writeElement('x:Anchor', $column . ', 15, ' . ($row - 2) . ', 10, ' . ($column + 4) . ', 15, ' . ($row + 5) . ', 18');
     // x:AutoFill
     $objWriter->writeElement('x:AutoFill', 'False');
     // x:Row
     $objWriter->writeElement('x:Row', $row - 1);
     // x:Column
     $objWriter->writeElement('x:Column', $column - 1);
     $objWriter->endElement();
     $objWriter->endElement();
 }
예제 #3
0
 /**
  * Write Cell
  *
  * @param    \PHPExcel\Shared\XMLWriter    $objWriter                XML Writer
  * @param    \PHPExcel\Worksheet            $pSheet                    Worksheet
  * @param    \PHPExcel\Cell                $pCellAddress            Cell Address
  * @param    string[]                    $pStringTable            String table
  * @param    string[]                    $pFlippedStringTable    String table (flipped), for faster index searching
  * @throws    \PHPExcel\Writer\Exception
  */
 private function writeCell(\PHPExcel\Shared\XMLWriter $objWriter = null, \PHPExcel\Worksheet $pSheet = null, $pCellAddress = null, $pStringTable = null, $pFlippedStringTable = null)
 {
     if (is_array($pStringTable) && is_array($pFlippedStringTable)) {
         // Cell
         $pCell = $pSheet->getCell($pCellAddress);
         $objWriter->startElement('c');
         $objWriter->writeAttribute('r', $pCellAddress);
         // Sheet styles
         if ($pCell->getXfIndex() != '') {
             $objWriter->writeAttribute('s', $pCell->getXfIndex());
         }
         // If cell value is supplied, write cell value
         $cellValue = $pCell->getValue();
         if (is_object($cellValue) || $cellValue !== '') {
             // Map type
             $mappedType = $pCell->getDataType();
             // Write data type depending on its type
             switch (strtolower($mappedType)) {
                 case 'inlinestr':
                     // Inline string
                 // Inline string
                 case 's':
                     // String
                 // String
                 case 'b':
                     // Boolean
                     $objWriter->writeAttribute('t', $mappedType);
                     break;
                 case 'f':
                     // Formula
                     $calculatedValue = $this->getParentWriter()->getPreCalculateFormulas() ? $pCell->getCalculatedValue() : $cellValue;
                     if (is_string($calculatedValue)) {
                         $objWriter->writeAttribute('t', 'str');
                     }
                     break;
                 case 'e':
                     // Error
                     $objWriter->writeAttribute('t', $mappedType);
             }
             // Write data depending on its type
             switch (strtolower($mappedType)) {
                 case 'inlinestr':
                     // Inline string
                     if (!$cellValue instanceof \PHPExcel\RichText) {
                         $objWriter->writeElement('t', \PHPExcel\Shared\StringHelper::controlCharacterPHP2OOXML(htmlspecialchars($cellValue)));
                     } elseif ($cellValue instanceof \PHPExcel\RichText) {
                         $objWriter->startElement('is');
                         $this->getParentWriter()->getWriterPart('stringtable')->writeRichText($objWriter, $cellValue);
                         $objWriter->endElement();
                     }
                     break;
                 case 's':
                     // String
                     if (!$cellValue instanceof \PHPExcel\RichText) {
                         if (isset($pFlippedStringTable[$cellValue])) {
                             $objWriter->writeElement('v', $pFlippedStringTable[$cellValue]);
                         }
                     } elseif ($cellValue instanceof \PHPExcel\RichText) {
                         $objWriter->writeElement('v', $pFlippedStringTable[$cellValue->getHashCode()]);
                     }
                     break;
                 case 'f':
                     // Formula
                     $attributes = $pCell->getFormulaAttributes();
                     if ($attributes['t'] == 'array') {
                         $objWriter->startElement('f');
                         $objWriter->writeAttribute('t', 'array');
                         $objWriter->writeAttribute('ref', $pCellAddress);
                         $objWriter->writeAttribute('aca', '1');
                         $objWriter->writeAttribute('ca', '1');
                         $objWriter->text(substr($cellValue, 1));
                         $objWriter->endElement();
                     } else {
                         $objWriter->writeElement('f', substr($cellValue, 1));
                     }
                     if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
                         if ($this->getParentWriter()->getPreCalculateFormulas()) {
                             //                                $calculatedValue = $pCell->getCalculatedValue();
                             if (!is_array($calculatedValue) && substr($calculatedValue, 0, 1) != '#') {
                                 $objWriter->writeElement('v', \PHPExcel\Shared\StringHelper::formatNumber($calculatedValue));
                             } else {
                                 $objWriter->writeElement('v', '0');
                             }
                         } else {
                             $objWriter->writeElement('v', '0');
                         }
                     }
                     break;
                 case 'n':
                     // Numeric
                     // force point as decimal separator in case current locale uses comma
                     $objWriter->writeElement('v', str_replace(',', '.', $cellValue));
                     break;
                 case 'b':
                     // Boolean
                     $objWriter->writeElement('v', $cellValue ? '1' : '0');
                     break;
                 case 'e':
                     // Error
                     if (substr($cellValue, 0, 1) == '=') {
                         $objWriter->writeElement('f', substr($cellValue, 1));
                         $objWriter->writeElement('v', substr($cellValue, 1));
                     } else {
                         $objWriter->writeElement('v', $cellValue);
                     }
                     break;
             }
         }
         $objWriter->endElement();
     } else {
         throw new \PHPExcel\Writer\Exception("Invalid parameters passed.");
     }
 }