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.7.0, 2009-08-10
  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 - 2009 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.             );
  248.         }
  249.  
  250.         $objWriter->endElement();
  251.     }
  252.  
  253.     /**
  254.      * Write sheet
  255.      *
  256.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  257.      * @param     string                         $pSheetname         Sheet name
  258.      * @param     int                            $pSheetId             Sheet id
  259.      * @param     int                            $pRelId                Relationship ID
  260.      * @throws     Exception
  261.      */
  262.     private function _writeSheet(PHPExcel_Shared_XMLWriter $objWriter null$pSheetname ''$pSheetId 1$pRelId 1)
  263.     {
  264.         if ($pSheetname != ''{
  265.             // Write sheet
  266.             $objWriter->startElement('sheet');
  267.             $objWriter->writeAttribute('name',         $pSheetname);
  268.             $objWriter->writeAttribute('sheetId',     $pSheetId);
  269.             $objWriter->writeAttribute('r:id',         'rId' $pRelId);
  270.             $objWriter->endElement();
  271.         else {
  272.             throw new Exception("Invalid parameters passed.");
  273.         }
  274.     }
  275.  
  276.     /**
  277.      * Write Defined Names
  278.      *
  279.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  280.      * @param     PHPExcel                    $pPHPExcel 
  281.      * @throws     Exception
  282.      */
  283.     private function _writeDefinedNames(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel $pPHPExcel null)
  284.     {
  285.         // Write defined names
  286.         $objWriter->startElement('definedNames');
  287.  
  288.         // Named ranges
  289.         if (count($pPHPExcel->getNamedRanges()) 0{
  290.             // Named ranges
  291.             $this->_writeNamedRanges($objWriter$pPHPExcel);
  292.         }
  293.  
  294.         // Other defined names
  295.         $sheetCount $pPHPExcel->getSheetCount();
  296.         for ($i 0$i $sheetCount++$i{
  297.             // definedName for autoFilter
  298.             $this->_writeDefinedNameForAutofilter($objWriter$pPHPExcel->getSheet($i)$i);
  299.  
  300.             // definedName for Print_Titles
  301.             $this->_writeDefinedNameForPrintTitles($objWriter$pPHPExcel->getSheet($i)$i);
  302.  
  303.             // definedName for Print_Area
  304.             $this->_writeDefinedNameForPrintArea($objWriter$pPHPExcel->getSheet($i)$i);
  305.         }
  306.  
  307.         $objWriter->endElement();
  308.     }
  309.  
  310.     /**
  311.      * Write named ranges
  312.      *
  313.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  314.      * @param     PHPExcel                    $pPHPExcel 
  315.      * @throws     Exception
  316.      */
  317.     private function _writeNamedRanges(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel $pPHPExcel)
  318.     {
  319.         // Loop named ranges
  320.         $namedRanges $pPHPExcel->getNamedRanges();
  321.         foreach ($namedRanges as $namedRange{
  322.             $this->_writeDefinedNameForNamedRange($objWriter$namedRange);
  323.         }
  324.     }
  325.  
  326.     /**
  327.      * Write Defined Name for autoFilter
  328.      *
  329.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  330.      * @param     PHPExcel_NamedRange            $pNamedRange 
  331.      * @throws     Exception
  332.      */
  333.     private function _writeDefinedNameForNamedRange(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_NamedRange $pNamedRange)
  334.     {
  335.         // definedName for named range
  336.         $objWriter->startElement('definedName');
  337.         $objWriter->writeAttribute('name',            $pNamedRange->getName());
  338.         if ($pNamedRange->getLocalOnly()) {
  339.             $objWriter->writeAttribute('localSheetId',    $pNamedRange->getWorksheet()->getParent()->getIndex($pNamedRange->getWorksheet()));
  340.         }
  341.  
  342.         // Create absolute coordinate and write as raw text
  343.         $range PHPExcel_Cell::splitRange($pNamedRange->getRange());
  344.         for ($i 0$i count($range)$i++{
  345.             $range[$i][0'\'' str_replace("'""''"$pNamedRange->getWorksheet()->getTitle()) '\'!' PHPExcel_Cell::absoluteCoordinate($range[$i][0]);
  346.             if (isset($range[$i][1])) {
  347.                 $range[$i][1PHPExcel_Cell::absoluteCoordinate($range[$i][1]);
  348.             }
  349.         }
  350.         $range PHPExcel_Cell::buildRange($range);
  351.  
  352.         $objWriter->writeRaw($range);
  353.  
  354.         $objWriter->endElement();
  355.     }
  356.  
  357.     /**
  358.      * Write Defined Name for autoFilter
  359.      *
  360.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  361.      * @param     PHPExcel_Worksheet            $pSheet 
  362.      * @param     int                            $pSheetId 
  363.      * @throws     Exception
  364.      */
  365.     private function _writeDefinedNameForAutofilter(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  366.     {
  367.         // definedName for autoFilter
  368.         if ($pSheet->getAutoFilter(!= ''{
  369.             $objWriter->startElement('definedName');
  370.             $objWriter->writeAttribute('name',            '_xlnm._FilterDatabase');
  371.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  372.             $objWriter->writeAttribute('hidden',        '1');
  373.  
  374.             // Create absolute coordinate and write as raw text
  375.             $range PHPExcel_Cell::splitRange($pSheet->getAutoFilter());
  376.             $range $range[0];
  377.             $range[0PHPExcel_Cell::absoluteCoordinate($range[0]);
  378.             $range[1PHPExcel_Cell::absoluteCoordinate($range[1]);
  379.             $range implode(':'$range);
  380.  
  381.             $objWriter->writeRaw('\'' str_replace("'""''"$pSheet->getTitle()) '\'!' $range);
  382.  
  383.             $objWriter->endElement();
  384.         }
  385.     }
  386.  
  387.     /**
  388.      * Write Defined Name for PrintTitles
  389.      *
  390.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  391.      * @param     PHPExcel_Worksheet            $pSheet 
  392.      * @param     int                            $pSheetId 
  393.      * @throws     Exception
  394.      */
  395.     private function _writeDefinedNameForPrintTitles(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  396.     {
  397.         // definedName for PrintTitles
  398.         if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet(|| $pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
  399.             $objWriter->startElement('definedName');
  400.             $objWriter->writeAttribute('name',            '_xlnm.Print_Titles');
  401.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  402.  
  403.             // Setting string
  404.             $settingString '';
  405.  
  406.             // Columns to repeat
  407.             if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) {
  408.                 $repeat $pSheet->getPageSetup()->getColumnsToRepeatAtLeft();
  409.  
  410.                 $settingString .= '\'' str_replace("'""''"$pSheet->getTitle()) '\'!$' $repeat[0':$' $repeat[1];
  411.             }
  412.  
  413.             // Rows to repeat
  414.             if ($pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
  415.                 if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) {
  416.                     $settingString .= ',';
  417.                 }
  418.  
  419.                 $repeat $pSheet->getPageSetup()->getRowsToRepeatAtTop();
  420.  
  421.                 $settingString .= '\'' str_replace("'""''"$pSheet->getTitle()) '\'!$' $repeat[0':$' $repeat[1];
  422.             }
  423.  
  424.             $objWriter->writeRaw($settingString);
  425.  
  426.             $objWriter->endElement();
  427.         }
  428.     }
  429.  
  430.     /**
  431.      * Write Defined Name for PrintTitles
  432.      *
  433.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  434.      * @param     PHPExcel_Worksheet            $pSheet 
  435.      * @param     int                            $pSheetId 
  436.      * @throws     Exception
  437.      */
  438.     private function _writeDefinedNameForPrintArea(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  439.     {
  440.         // definedName for PrintArea
  441.         if ($pSheet->getPageSetup()->isPrintAreaSet()) {
  442.             $objWriter->startElement('definedName');
  443.             $objWriter->writeAttribute('name',            '_xlnm.Print_Area');
  444.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  445.  
  446.             // Setting string
  447.             $settingString '';
  448.  
  449.             // Print area
  450.             $printArea PHPExcel_Cell::splitRange($pSheet->getPageSetup()->getPrintArea());
  451.             $printArea $printArea[0];
  452.             $printArea[0PHPExcel_Cell::absoluteCoordinate($printArea[0]);
  453.             $printArea[1PHPExcel_Cell::absoluteCoordinate($printArea[1]);
  454.  
  455.             $objWriter->writeRaw('\'' str_replace("'""''"$pSheet->getTitle()) '\'!' implode(':'$printArea));
  456.  
  457.             $objWriter->endElement();
  458.         }
  459.     }
  460. }

Documentation generated on Mon, 10 Aug 2009 08:11:37 +0200 by phpDocumentor 1.4.1