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

Documentation generated on Mon, 05 Jan 2009 20:38:45 +0100 by phpDocumentor 1.4.1