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

Documentation generated on Mon, 27 Oct 2008 08:41:45 +0100 by phpDocumentor 1.4.1