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

Documentation generated on Mon, 11 Jan 2010 08:18:44 +0100 by phpDocumentor 1.4.1