PHPExcel_Writer_Excel2007
[ class tree: PHPExcel_Writer_Excel2007 ] [ index: PHPExcel_Writer_Excel2007 ] [ all elements ]

Source for file Workbook.php

Documentation is available at Workbook.php

  1. <?php
  2. /**
  3.  * PHPExcel
  4.  *
  5.  * Copyright (c) 2006 - 2011 PHPExcel
  6.  *
  7.  * This library is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * This library is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with this library; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  20.  *
  21.  * @category   PHPExcel
  22.  * @package    PHPExcel_Writer_Excel2007
  23.  * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
  24.  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25.  * @version    1.7.6, 2011-02-27
  26.  */
  27.  
  28.  
  29. /**
  30.  * PHPExcel_Writer_Excel2007_Workbook
  31.  *
  32.  * @category   PHPExcel
  33.  * @package    PHPExcel_Writer_Excel2007
  34.  * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
  35.  */
  36. {
  37.     /**
  38.      * Write workbook to XML format
  39.      *
  40.      * @param     PHPExcel    $pPHPExcel 
  41.      * @return     string         XML Output
  42.      * @throws     Exception
  43.      */
  44.     public function writeWorkbook(PHPExcel $pPHPExcel null)
  45.     {
  46.         // Create XML writer
  47.         $objWriter null;
  48.         if ($this->getParentWriter()->getUseDiskCaching()) {
  49.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK$this->getParentWriter()->getDiskCachingDirectory());
  50.         else {
  51.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  52.         }
  53.  
  54.         // XML header
  55.         $objWriter->startDocument('1.0','UTF-8','yes');
  56.  
  57.         // workbook
  58.         $objWriter->startElement('workbook');
  59.         $objWriter->writeAttribute('xml:space''preserve');
  60.         $objWriter->writeAttribute('xmlns''http://schemas.openxmlformats.org/spreadsheetml/2006/main');
  61.         $objWriter->writeAttribute('xmlns:r''http://schemas.openxmlformats.org/officeDocument/2006/relationships');
  62.  
  63.             // fileVersion
  64.             $this->_writeFileVersion($objWriter);
  65.  
  66.             // workbookPr
  67.             $this->_writeWorkbookPr($objWriter);
  68.  
  69.             // workbookProtection
  70.             $this->_writeWorkbookProtection($objWriter$pPHPExcel);
  71.  
  72.             // bookViews
  73.             if ($this->getParentWriter()->getOffice2003Compatibility(=== false{
  74.                 $this->_writeBookViews($objWriter$pPHPExcel);
  75.             }
  76.  
  77.             // sheets
  78.             $this->_writeSheets($objWriter$pPHPExcel);
  79.  
  80.             // definedNames
  81.             $this->_writeDefinedNames($objWriter$pPHPExcel);
  82.  
  83.             // calcPr
  84.             $this->_writeCalcPr($objWriter);
  85.  
  86.         $objWriter->endElement();
  87.  
  88.         // Return
  89.         return $objWriter->getData();
  90.     }
  91.  
  92.     /**
  93.      * Write file version
  94.      *
  95.      * @param     PHPExcel_Shared_XMLWriter $objWriter         XML Writer
  96.      * @throws     Exception
  97.      */
  98.     private function _writeFileVersion(PHPExcel_Shared_XMLWriter $objWriter null)
  99.     {
  100.         $objWriter->startElement('fileVersion');
  101.         $objWriter->writeAttribute('appName''xl');
  102.         $objWriter->writeAttribute('lastEdited''4');
  103.         $objWriter->writeAttribute('lowestEdited''4');
  104.         $objWriter->writeAttribute('rupBuild''4505');
  105.         $objWriter->endElement();
  106.     }
  107.  
  108.     /**
  109.      * Write WorkbookPr
  110.      *
  111.      * @param     PHPExcel_Shared_XMLWriter $objWriter         XML Writer
  112.      * @throws     Exception
  113.      */
  114.     private function _writeWorkbookPr(PHPExcel_Shared_XMLWriter $objWriter null)
  115.     {
  116.         $objWriter->startElement('workbookPr');
  117.  
  118.         if (PHPExcel_Shared_Date::getExcelCalendar(== PHPExcel_Shared_Date::CALENDAR_MAC_1904{
  119.             $objWriter->writeAttribute('date1904''1');
  120.         }
  121.  
  122.         $objWriter->writeAttribute('codeName''ThisWorkbook');
  123.  
  124.         $objWriter->endElement();
  125.     }
  126.  
  127.     /**
  128.      * Write BookViews
  129.      *
  130.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  131.      * @param     PHPExcel                    $pPHPExcel 
  132.      * @throws     Exception
  133.      */
  134.     private function _writeBookViews(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel $pPHPExcel null)
  135.     {
  136.         // bookViews
  137.         $objWriter->startElement('bookViews');
  138.  
  139.             // workbookView
  140.             $objWriter->startElement('workbookView');
  141.  
  142.             $objWriter->writeAttribute('activeTab'$pPHPExcel->getActiveSheetIndex());
  143.             $objWriter->writeAttribute('autoFilterDateGrouping''1');
  144.             $objWriter->writeAttribute('firstSheet''0');
  145.             $objWriter->writeAttribute('minimized''0');
  146.             $objWriter->writeAttribute('showHorizontalScroll''1');
  147.             $objWriter->writeAttribute('showSheetTabs''1');
  148.             $objWriter->writeAttribute('showVerticalScroll''1');
  149.             $objWriter->writeAttribute('tabRatio''600');
  150.             $objWriter->writeAttribute('visibility''visible');
  151.  
  152.             $objWriter->endElement();
  153.  
  154.         $objWriter->endElement();
  155.     }
  156.  
  157.     /**
  158.      * Write WorkbookProtection
  159.      *
  160.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  161.      * @param     PHPExcel                    $pPHPExcel 
  162.      * @throws     Exception
  163.      */
  164.     private function _writeWorkbookProtection(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel $pPHPExcel null)
  165.     {
  166.         if ($pPHPExcel->getSecurity()->isSecurityEnabled()) {
  167.             $objWriter->startElement('workbookProtection');
  168.             $objWriter->writeAttribute('lockRevision',        ($pPHPExcel->getSecurity()->getLockRevision('true' 'false'));
  169.             $objWriter->writeAttribute('lockStructure',     ($pPHPExcel->getSecurity()->getLockStructure('true' 'false'));
  170.             $objWriter->writeAttribute('lockWindows',         ($pPHPExcel->getSecurity()->getLockWindows('true' 'false'));
  171.  
  172.             if ($pPHPExcel->getSecurity()->getRevisionsPassword(!= ''{
  173.                 $objWriter->writeAttribute('revisionsPassword',    $pPHPExcel->getSecurity()->getRevisionsPassword());
  174.             }
  175.  
  176.             if ($pPHPExcel->getSecurity()->getWorkbookPassword(!= ''{
  177.                 $objWriter->writeAttribute('workbookPassword',    $pPHPExcel->getSecurity()->getWorkbookPassword());
  178.             }
  179.  
  180.             $objWriter->endElement();
  181.         }
  182.     }
  183.  
  184.     /**
  185.      * Write calcPr
  186.      *
  187.      * @param     PHPExcel_Shared_XMLWriter $objWriter         XML Writer
  188.      * @throws     Exception
  189.      */
  190.     private function _writeCalcPr(PHPExcel_Shared_XMLWriter $objWriter null)
  191.     {
  192.         $objWriter->startElement('calcPr');
  193.  
  194.         $objWriter->writeAttribute('calcId',             '124519');
  195.         $objWriter->writeAttribute('calcMode',             'auto');
  196.         $objWriter->writeAttribute('fullCalcOnLoad',     '1');
  197.  
  198.         $objWriter->endElement();
  199.     }
  200.  
  201.     /**
  202.      * Write sheets
  203.      *
  204.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  205.      * @param     PHPExcel                    $pPHPExcel 
  206.      * @throws     Exception
  207.      */
  208.     private function _writeSheets(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel $pPHPExcel null)
  209.     {
  210.         // Write sheets
  211.         $objWriter->startElement('sheets');
  212.         $sheetCount $pPHPExcel->getSheetCount();
  213.         for ($i 0$i $sheetCount++$i{
  214.             // sheet
  215.             $this->_writeSheet(
  216.                 $objWriter,
  217.                 $pPHPExcel->getSheet($i)->getTitle(),
  218.                 ($i 1),
  219.                 ($i 3),
  220.                 $pPHPExcel->getSheet($i)->getSheetState()
  221.             );
  222.         }
  223.  
  224.         $objWriter->endElement();
  225.     }
  226.  
  227.     /**
  228.      * Write sheet
  229.      *
  230.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  231.      * @param     string                         $pSheetname         Sheet name
  232.      * @param     int                            $pSheetId             Sheet id
  233.      * @param     int                            $pRelId                Relationship ID
  234.      * @param   string                      $sheetState         Sheet state (visible, hidden, veryHidden)
  235.      * @throws     Exception
  236.      */
  237.     private function _writeSheet(PHPExcel_Shared_XMLWriter $objWriter null$pSheetname ''$pSheetId 1$pRelId 1$sheetState 'visible')
  238.     {
  239.         if ($pSheetname != ''{
  240.             // Write sheet
  241.             $objWriter->startElement('sheet');
  242.             $objWriter->writeAttribute('name',         $pSheetname);
  243.             $objWriter->writeAttribute('sheetId',     $pSheetId);
  244.             if ($sheetState != 'visible' && $sheetState != ''{
  245.                 $objWriter->writeAttribute('state'$sheetState);
  246.             }
  247.             $objWriter->writeAttribute('r:id',         'rId' $pRelId);
  248.             $objWriter->endElement();
  249.         else {
  250.             throw new Exception("Invalid parameters passed.");
  251.         }
  252.     }
  253.  
  254.     /**
  255.      * Write Defined Names
  256.      *
  257.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  258.      * @param     PHPExcel                    $pPHPExcel 
  259.      * @throws     Exception
  260.      */
  261.     private function _writeDefinedNames(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel $pPHPExcel null)
  262.     {
  263.         // Write defined names
  264.         $objWriter->startElement('definedNames');
  265.  
  266.         // Named ranges
  267.         if (count($pPHPExcel->getNamedRanges()) 0{
  268.             // Named ranges
  269.             $this->_writeNamedRanges($objWriter$pPHPExcel);
  270.         }
  271.  
  272.         // Other defined names
  273.         $sheetCount $pPHPExcel->getSheetCount();
  274.         for ($i 0$i $sheetCount++$i{
  275.             // definedName for autoFilter
  276.             $this->_writeDefinedNameForAutofilter($objWriter$pPHPExcel->getSheet($i)$i);
  277.  
  278.             // definedName for Print_Titles
  279.             $this->_writeDefinedNameForPrintTitles($objWriter$pPHPExcel->getSheet($i)$i);
  280.  
  281.             // definedName for Print_Area
  282.             $this->_writeDefinedNameForPrintArea($objWriter$pPHPExcel->getSheet($i)$i);
  283.         }
  284.  
  285.         $objWriter->endElement();
  286.     }
  287.  
  288.     /**
  289.      * Write named ranges
  290.      *
  291.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  292.      * @param     PHPExcel                    $pPHPExcel 
  293.      * @throws     Exception
  294.      */
  295.     private function _writeNamedRanges(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel $pPHPExcel)
  296.     {
  297.         // Loop named ranges
  298.         $namedRanges $pPHPExcel->getNamedRanges();
  299.         foreach ($namedRanges as $namedRange{
  300.             $this->_writeDefinedNameForNamedRange($objWriter$namedRange);
  301.         }
  302.     }
  303.  
  304.     /**
  305.      * Write Defined Name for autoFilter
  306.      *
  307.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  308.      * @param     PHPExcel_NamedRange            $pNamedRange 
  309.      * @throws     Exception
  310.      */
  311.     private function _writeDefinedNameForNamedRange(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_NamedRange $pNamedRange)
  312.     {
  313.         // definedName for named range
  314.         $objWriter->startElement('definedName');
  315.         $objWriter->writeAttribute('name',            $pNamedRange->getName());
  316.         if ($pNamedRange->getLocalOnly()) {
  317.             $objWriter->writeAttribute('localSheetId',    $pNamedRange->getScope()->getParent()->getIndex($pNamedRange->getScope()));
  318.         }
  319.  
  320.         // Create absolute coordinate and write as raw text
  321.         $range PHPExcel_Cell::splitRange($pNamedRange->getRange());
  322.         for ($i 0$i count($range)$i++{
  323.             $range[$i][0'\'' str_replace("'""''"$pNamedRange->getWorksheet()->getTitle()) '\'!' PHPExcel_Cell::absoluteReference($range[$i][0]);
  324.             if (isset($range[$i][1])) {
  325.                 $range[$i][1PHPExcel_Cell::absoluteReference($range[$i][1]);
  326.             }
  327.         }
  328.         $range PHPExcel_Cell::buildRange($range);
  329.  
  330.         $objWriter->writeRawData($range);
  331.  
  332.         $objWriter->endElement();
  333.     }
  334.  
  335.     /**
  336.      * Write Defined Name for autoFilter
  337.      *
  338.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  339.      * @param     PHPExcel_Worksheet            $pSheet 
  340.      * @param     int                            $pSheetId 
  341.      * @throws     Exception
  342.      */
  343.     private function _writeDefinedNameForAutofilter(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  344.     {
  345.         // definedName for autoFilter
  346.         if ($pSheet->getAutoFilter(!= ''{
  347.             $objWriter->startElement('definedName');
  348.             $objWriter->writeAttribute('name',            '_xlnm._FilterDatabase');
  349.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  350.             $objWriter->writeAttribute('hidden',        '1');
  351.  
  352.             // Create absolute coordinate and write as raw text
  353.             $range PHPExcel_Cell::splitRange($pSheet->getAutoFilter());
  354.             $range $range[0];
  355.             $range[0PHPExcel_Cell::absoluteCoordinate($range[0]);
  356.             $range[1PHPExcel_Cell::absoluteCoordinate($range[1]);
  357.             $range implode(':'$range);
  358.  
  359.             $objWriter->writeRawData('\'' str_replace("'""''"$pSheet->getTitle()) '\'!' $range);
  360.  
  361.             $objWriter->endElement();
  362.         }
  363.     }
  364.  
  365.     /**
  366.      * Write Defined Name for PrintTitles
  367.      *
  368.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  369.      * @param     PHPExcel_Worksheet            $pSheet 
  370.      * @param     int                            $pSheetId 
  371.      * @throws     Exception
  372.      */
  373.     private function _writeDefinedNameForPrintTitles(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  374.     {
  375.         // definedName for PrintTitles
  376.         if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet(|| $pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
  377.             $objWriter->startElement('definedName');
  378.             $objWriter->writeAttribute('name',            '_xlnm.Print_Titles');
  379.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  380.  
  381.             // Setting string
  382.             $settingString '';
  383.  
  384.             // Columns to repeat
  385.             if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) {
  386.                 $repeat $pSheet->getPageSetup()->getColumnsToRepeatAtLeft();
  387.  
  388.                 $settingString .= '\'' str_replace("'""''"$pSheet->getTitle()) '\'!$' $repeat[0':$' $repeat[1];
  389.             }
  390.  
  391.             // Rows to repeat
  392.             if ($pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
  393.                 if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) {
  394.                     $settingString .= ',';
  395.                 }
  396.  
  397.                 $repeat $pSheet->getPageSetup()->getRowsToRepeatAtTop();
  398.  
  399.                 $settingString .= '\'' str_replace("'""''"$pSheet->getTitle()) '\'!$' $repeat[0':$' $repeat[1];
  400.             }
  401.  
  402.             $objWriter->writeRawData($settingString);
  403.  
  404.             $objWriter->endElement();
  405.         }
  406.     }
  407.  
  408.     /**
  409.      * Write Defined Name for PrintTitles
  410.      *
  411.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  412.      * @param     PHPExcel_Worksheet            $pSheet 
  413.      * @param     int                            $pSheetId 
  414.      * @throws     Exception
  415.      */
  416.     private function _writeDefinedNameForPrintArea(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  417.     {
  418.         // definedName for PrintArea
  419.         if ($pSheet->getPageSetup()->isPrintAreaSet()) {
  420.             $objWriter->startElement('definedName');
  421.             $objWriter->writeAttribute('name',            '_xlnm.Print_Area');
  422.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  423.  
  424.             // Setting string
  425.             $settingString '';
  426.  
  427.             // Print area
  428.             $printArea PHPExcel_Cell::splitRange($pSheet->getPageSetup()->getPrintArea());
  429.  
  430.             $chunks array();
  431.             foreach ($printArea as $printAreaRect{
  432.                 $printAreaRect[0PHPExcel_Cell::absoluteReference($printAreaRect[0]);
  433.                 $printAreaRect[1PHPExcel_Cell::absoluteReference($printAreaRect[1]);
  434.                 $chunks['\'' str_replace("'""''"$pSheet->getTitle()) '\'!' implode(':'$printAreaRect);
  435.             }
  436.  
  437.             $objWriter->writeRawData(implode(','$chunks));
  438.  
  439.             $objWriter->endElement();
  440.         }
  441.     }
  442. }

Documentation generated on Sun, 27 Feb 2011 16:37:02 -0800 by phpDocumentor 1.4.3