<?php /** * Utility class to access OpenDocument spreadsheets read-only * * Requires PHP 5.2 * * @version $Id: Calc_Reader.php,v 1.4 2007-09-02 20:50:12 marand Exp $ * @license CeCILL 2.0 * @copyright 2005-2006 Ouest Systemes Informatiques */ $erCalc_Reader = error_reporting(E_ALL | E_STRICT); /** * Utility class to access OpenDocument spreadsheets read-only */ class Calc_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', Calc_Reader::NS_OFFICE); $this->xpath->registerNameSpace('table', Calc_Reader::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(Calc_Reader::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; } } error_reporting($erCalc_Reader); unset ($erCalc_Reader);