1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- /**
- * Wrap an OpenDocument spreadsheet cell
- *
- * @license CeCILL 2.0
- * @copyright 2005-2012,2020 Ouest Systemes Informatiques
- */
- namespace Osinet\OpenDocument\Calc;
- /**
- * 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 string $dataType;
- public ?string $dataValue;
- public ?string $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): void {
- $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}");
- }
- }
- /**
- * implement magic method __toString
- *
- * @return string
- */
- function __toString() {
- return (string) $this->displayValue;
- }
- }
|