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.7, 2009-04-22
  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$this->getParentWriter()->getDiskCachingDirectory());
  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.         for ($i 0$i count($range)$i++{
  337.             $range[$i][0'\'' str_replace("'""''"$pNamedRange->getWorksheet()->getTitle()) '\'!' PHPExcel_Cell::absoluteCoordinate($range[$i][0]);
  338.             if (isset($range[$i][1])) {
  339.                 $range[$i][1PHPExcel_Cell::absoluteCoordinate($range[$i][1]);
  340.             }
  341.         }
  342.         $range PHPExcel_Cell::buildRange($range);
  343.  
  344.         $objWriter->writeRaw($range);
  345.  
  346.         $objWriter->endElement();
  347.     }
  348.  
  349.     /**
  350.      * Write Defined Name for autoFilter
  351.      *
  352.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  353.      * @param     PHPExcel_Worksheet            $pSheet 
  354.      * @param     int                            $pSheetId 
  355.      * @throws     Exception
  356.      */
  357.     private function _writeDefinedNameForAutofilter(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  358.     {
  359.         // definedName for autoFilter
  360.         if ($pSheet->getAutoFilter(!= ''{
  361.             $objWriter->startElement('definedName');
  362.             $objWriter->writeAttribute('name',            '_xlnm._FilterDatabase');
  363.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  364.             $objWriter->writeAttribute('hidden',        '1');
  365.  
  366.             // Create absolute coordinate and write as raw text
  367.             $range PHPExcel_Cell::splitRange($pSheet->getAutoFilter());
  368.             $range $range[0];
  369.             $range[0PHPExcel_Cell::absoluteCoordinate($range[0]);
  370.             $range[1PHPExcel_Cell::absoluteCoordinate($range[1]);
  371.             $range implode(':'$range);
  372.  
  373.             $objWriter->writeRaw('\'' str_replace("'""''"$pSheet->getTitle()) '\'!' $range);
  374.  
  375.             $objWriter->endElement();
  376.         }
  377.     }
  378.  
  379.     /**
  380.      * Write Defined Name for PrintTitles
  381.      *
  382.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  383.      * @param     PHPExcel_Worksheet            $pSheet 
  384.      * @param     int                            $pSheetId 
  385.      * @throws     Exception
  386.      */
  387.     private function _writeDefinedNameForPrintTitles(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  388.     {
  389.         // definedName for PrintTitles
  390.         if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet(|| $pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
  391.             $objWriter->startElement('definedName');
  392.             $objWriter->writeAttribute('name',            '_xlnm.Print_Titles');
  393.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  394.  
  395.             // Setting string
  396.             $settingString '';
  397.  
  398.             // Columns to repeat
  399.             if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) {
  400.                 $repeat $pSheet->getPageSetup()->getColumnsToRepeatAtLeft();
  401.  
  402.                 $settingString .= '\'' str_replace("'""''"$pSheet->getTitle()) '\'!$' $repeat[0':$' $repeat[1];
  403.             }
  404.  
  405.             // Rows to repeat
  406.             if ($pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
  407.                 if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) {
  408.                     $settingString .= ',';
  409.                 }
  410.  
  411.                 $repeat $pSheet->getPageSetup()->getRowsToRepeatAtTop();
  412.  
  413.                 $settingString .= '\'' str_replace("'""''"$pSheet->getTitle()) '\'!$' $repeat[0':$' $repeat[1];
  414.             }
  415.  
  416.             $objWriter->writeRaw($settingString);
  417.  
  418.             $objWriter->endElement();
  419.         }
  420.     }
  421.  
  422.     /**
  423.      * Write Defined Name for PrintTitles
  424.      *
  425.      * @param     PHPExcel_Shared_XMLWriter    $objWriter         XML Writer
  426.      * @param     PHPExcel_Worksheet            $pSheet 
  427.      * @param     int                            $pSheetId 
  428.      * @throws     Exception
  429.      */
  430.     private function _writeDefinedNameForPrintArea(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet $pSheet null$pSheetId 0)
  431.     {
  432.         // definedName for PrintArea
  433.         if ($pSheet->getPageSetup()->isPrintAreaSet()) {
  434.             $objWriter->startElement('definedName');
  435.             $objWriter->writeAttribute('name',            '_xlnm.Print_Area');
  436.             $objWriter->writeAttribute('localSheetId',    $pSheetId);
  437.  
  438.             // Setting string
  439.             $settingString '';
  440.  
  441.             // Print area
  442.             $printArea PHPExcel_Cell::splitRange($pSheet->getPageSetup()->getPrintArea());
  443.             $printArea $printArea[0];
  444.             $printArea[0PHPExcel_Cell::absoluteCoordinate($printArea[0]);
  445.             $printArea[1PHPExcel_Cell::absoluteCoordinate($printArea[1]);
  446.  
  447.             $objWriter->writeRaw('\'' str_replace("'""''"$pSheet->getTitle()) '\'!' implode(':'$printArea));
  448.  
  449.             $objWriter->endElement();
  450.         }
  451.     }
  452. }

Documentation generated on Wed, 22 Apr 2009 09:06:33 +0200 by phpDocumentor 1.4.1