<?php /** * Utility class to access OpenDocument spreadsheets read-only * * Requires PHP 5.3 * * @license CeCILL 2.0 * @copyright 2005-2012 Ouest Systemes Informatiques */ namespace OSInet\Open_Document\Calc; /** * Utility class to access OpenDocument spreadsheets read-only */ class Reader { const NS_TABLE = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"; const NS_OFFICE = "urn:oasis:names:tc:opendocument:xmlns:office:1.0"; /** * @var DOMDocument $xml */ public $xml; /** * @var DOMXPath $xpath */ public $xpath; function __construct($path) { $this->xml = new \DOMDocument(); $this->xml->preserveWhiteSpace = FALSE; $this->xml->load($path); $this->xpath = new \DOMXPath($this->xml); $this->xpath->registerNameSpace('office', self::NS_OFFICE); $this->xpath->registerNameSpace('table', self::NS_TABLE); } /** * Return a DOMNodeList of the worksheets available in the document * * @return \DOMNodeList */ function getCalcSheets() { $sq = '//table:table'; $list = $this->xpath->query($sq); unset($sq); return $list; } /** * Return the names of the worksheets available in the document * * @return array */ function getCalcSheetNames() { $dnlSheets = $this->getCalcSheets(); $ret = array(); foreach ($dnlSheets as $node) { $ret[] = $node->getAttributeNS(self::NS_TABLE, 'name'); } unset($dnlSheets); return $ret; } /** * Return the rows in the spreadsheet as a DOMNodeList. * * WARNING: this means ALL the rows, in all the sheets, not just the first sheet * * @param string $namedRange * Optional name of range, notably Sheet name * @return \DOMNodeList */ function getRows ($namedRange = NULL) { $query = empty($namedRange) ? '//table:table-row' : '//table:table[@table:name="' . $namedRange . '"]/table:table-row'; $ret = $this->xpath->query($query); unset($query); return $ret; } }