| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | <?php/** * Wrap an OpenDocument spreadsheet cell * * Requires PHP 5.3 * * @license CeCILL 2.0 * @copyright 2005-2012 Ouest Systemes Informatiques */namespace OSInet\Open_Document\Calc;use OSInet\Open_Document\Calc\Reader;/** * OpenDocument Spreadsheet cell */class 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(Reader::NS_OFFICE, 'value-type');      if ($cellNode->childNodes->length == 0) {        $this->dataType  = self::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 == self::TYPE_STRING) {          //$this->dataValue = $this->displayValue;        }        else {          $this->dataValue = $cellNode->getAttributeNS(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 = self::TYPE_EMPTY;        $this->dataValue = NULL;        $this->displayValue = NULL;        break;      case 'string':        $this->dataType = self::TYPE_STRING;        $this->dataValue = NULL;        $this->displayValue = $x;        break;      case 'double':        $this->dataType = self::TYPE_FLOAT;        $this->dataValue = $x;        $this->displayValue = number_format($x);        break;      default:        $this->set();        throw new \Exception('Cell::set unsupported value type ', $type);        break;      }    }  /**   * implement magic method __toString   *   * @return string   */  function __toString() {    return (string) $this->displayValue;  }}
 |