php__phplib/OSInet/Open_Document/Calc/Reader.php
Frederic G. MARAND 6a058cd843 Converted the OSInet ODF Calc reader classes to PSR0
- classes are now namespace.
- added a demo in apps/odf_calc_reader.
- added associated cleanup in Makefile.
2012-05-05 22:58:31 +02:00

90 lines
2 KiB
PHP

<?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;
}
}