<?php /** * Wrap an OpenDocument spreadsheet cell * * Requires PHP 5.2 * * @version $Id: Calc_Cell.php,v 1.3 2007-09-09 19:50:22 marand Exp $ * @license CeCILL 2.0 * @copyright 2005-2006 Ouest Systemes Informatiques */ /** * OpenDocument Spreadsheet cell */ $erCalc_Cell = error_reporting(E_ALL | E_STRICT); class Calc_Cell { /** * Values of the 'office:value-type' attribute */ const TYPE_STRING = 'string'; const TYPE_FLOAT = 'float'; const TYPE_EMPTY = 'empty'; // used if attribute is missing public $dataType; public $dataValue; public $displayValue; /** * @param DOMNode $cellNode */ function __construct(DOMNode $cellNode) { if ($cellNode instanceof DOMElement) { $this->dataType = $cellNode->getAttributeNS(Calc_Reader::NS_OFFICE, 'value-type'); if ($cellNode->childNodes->length == 0) { $this->dataType = Calc_Cell::TYPE_EMPTY; $this->dataValue = NULL; $this->displayValue = ''; } else { $p = $cellNode->childNodes->item(0); $this->displayValue = $p->textContent; unset($p); /** * Note: cells with office:value-type==string don't have a office:value */ if ($this->dataType == Calc_Cell::TYPE_STRING) { //$this->dataValue = $this->displayValue; } else { $this->dataValue = $cellNode->getAttributeNS(Calc_Reader::NS_OFFICE, 'value'); } } } /* echo "children: " . $cellNode->childNodes->length . ", type = " . $this->dataType . ", value = " . substr($this->dataValue, 0, 20) . ", display = <" . substr($this->displayValue, 0, 20) . ">" . PHP_EOL; */ } /** * Convert a PHP value to a wrapped OpenDocument cell value * * @param mixed $x */ function set($x = NULL) { $type = gettype($x); switch ($type) { case 'NULL': $this->dataType = Calc_Cell::TYPE_EMPTY; $this->dataValue = NULL; $this->displayValue = NULL; break; case 'string': $this->dataType = Calc_Cell::TYPE_STRING; $this->dataValue = NULL; $this->displayValue = $x; break; case 'double': $this->dataType = Calc_Cell::TYPE_FLOAT; $this->dataValue = $x; $this->displayValue = number_format($x); break; default: $this->set(); throw new Exception('Calc_Cell::set unsupported value type ', $type); break; } } /** * implement magic method __toString * * @return string */ function __toString() { return (string) $this->displayValue; } } error_reporting($erCalc_Cell); unset($erCalc_Cell);