Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2388 jpm 1
<?php
2
/**
3
 * PHPExcel
4
 *
5
 * Copyright (c) 2006 - 2013 PHPExcel
6
 *
7
 * This library is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * This library is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20
 *
21
 * @category	PHPExcel
22
 * @package		PHPExcel_Chart
23
 * @copyright	Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
24
 * @license		http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
25
 * @version		##VERSION##, ##DATE##
26
 */
27
 
28
 
29
/**
30
 * PHPExcel_Chart_DataSeriesValues
31
 *
32
 * @category	PHPExcel
33
 * @package		PHPExcel_Chart
34
 * @copyright	Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
35
 */
36
class PHPExcel_Chart_DataSeriesValues
37
{
38
 
39
	const DATASERIES_TYPE_STRING	= 'String';
40
	const DATASERIES_TYPE_NUMBER	= 'Number';
41
 
42
	private static $_dataTypeValues = array(
43
		self::DATASERIES_TYPE_STRING,
44
		self::DATASERIES_TYPE_NUMBER,
45
	);
46
 
47
	/**
48
	 * Series Data Type
49
	 *
50
	 * @var	string
51
	 */
52
	private $_dataType = null;
53
 
54
	/**
55
	 * Series Data Source
56
	 *
57
	 * @var	string
58
	 */
59
	private $_dataSource = null;
60
 
61
	/**
62
	 * Format Code
63
	 *
64
	 * @var	string
65
	 */
66
	private $_formatCode = null;
67
 
68
	/**
69
	 * Series Point Marker
70
	 *
71
	 * @var	string
72
	 */
73
	private $_marker = null;
74
 
75
	/**
76
	 * Point Count (The number of datapoints in the dataseries)
77
	 *
78
	 * @var	integer
79
	 */
80
	private $_pointCount = 0;
81
 
82
	/**
83
	 * Data Values
84
	 *
85
	 * @var	array of mixed
86
	 */
87
	private $_dataValues = array();
88
 
89
	/**
90
	 * Create a new PHPExcel_Chart_DataSeriesValues object
91
	 */
92
	public function __construct($dataType = self::DATASERIES_TYPE_NUMBER, $dataSource = null, $formatCode = null, $pointCount = 0, $dataValues = array(), $marker = null)
93
	{
94
		$this->setDataType($dataType);
95
		$this->_dataSource = $dataSource;
96
		$this->_formatCode = $formatCode;
97
		$this->_pointCount = $pointCount;
98
		$this->_dataValues = $dataValues;
99
		$this->_marker = $marker;
100
	}
101
 
102
	/**
103
	 * Get Series Data Type
104
	 *
105
	 * @return	string
106
	 */
107
	public function getDataType() {
108
		return $this->_dataType;
109
	}
110
 
111
	/**
112
	 * Set Series Data Type
113
	 *
114
	 * @param	string	$dataType	Datatype of this data series
115
	 *								Typical values are:
116
	 *									PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_STRING
117
	 *										Normally used for axis point values
118
	 *									PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_NUMBER
119
	 *										Normally used for chart data values
120
	 * @return	PHPExcel_Chart_DataSeriesValues
121
	 */
122
	public function setDataType($dataType = self::DATASERIES_TYPE_NUMBER) {
123
		if (!in_array($dataType, self::$_dataTypeValues)) {
124
    		throw new PHPExcel_Chart_Exception('Invalid datatype for chart data series values');
125
		}
126
		$this->_dataType = $dataType;
127
 
128
		return $this;
129
	}
130
 
131
	/**
132
	 * Get Series Data Source (formula)
133
	 *
134
	 * @return	string
135
	 */
136
	public function getDataSource() {
137
		return $this->_dataSource;
138
	}
139
 
140
	/**
141
	 * Set Series Data Source (formula)
142
	 *
143
	 * @param	string	$dataSource
144
	 * @return	PHPExcel_Chart_DataSeriesValues
145
	 */
146
	public function setDataSource($dataSource = null, $refreshDataValues = true) {
147
		$this->_dataSource = $dataSource;
148
 
149
		if ($refreshDataValues) {
150
			//	TO DO
151
		}
152
 
153
		return $this;
154
	}
155
 
156
	/**
157
	 * Get Point Marker
158
	 *
159
	 * @return string
160
	 */
161
	public function getPointMarker() {
162
		return $this->_marker;
163
	}
164
 
165
	/**
166
	 * Set Point Marker
167
	 *
168
	 * @param	string	$marker
169
	 * @return	PHPExcel_Chart_DataSeriesValues
170
	 */
171
	public function setPointMarker($marker = null) {
172
		$this->_marker = $marker;
173
 
174
		return $this;
175
	}
176
 
177
	/**
178
	 * Get Series Format Code
179
	 *
180
	 * @return	string
181
	 */
182
	public function getFormatCode() {
183
		return $this->_formatCode;
184
	}
185
 
186
	/**
187
	 * Set Series Format Code
188
	 *
189
	 * @param	string	$formatCode
190
	 * @return	PHPExcel_Chart_DataSeriesValues
191
	 */
192
	public function setFormatCode($formatCode = null) {
193
		$this->_formatCode = $formatCode;
194
 
195
		return $this;
196
	}
197
 
198
	/**
199
	 * Get Series Point Count
200
	 *
201
	 * @return	integer
202
	 */
203
	public function getPointCount() {
204
		return $this->_pointCount;
205
	}
206
 
207
	/**
208
	 * Identify if the Data Series is a multi-level or a simple series
209
	 *
210
	 * @return	boolean
211
	 */
212
	public function isMultiLevelSeries() {
213
		if (count($this->_dataValues) > 0) {
214
			return is_array($this->_dataValues[0]);
215
		}
216
		return null;
217
	}
218
 
219
	/**
220
	 * Return the level count of a multi-level Data Series
221
	 *
222
	 * @return	boolean
223
	 */
224
	public function multiLevelCount() {
225
		$levelCount = 0;
226
		foreach($this->_dataValues as $dataValueSet) {
227
			$levelCount = max($levelCount,count($dataValueSet));
228
		}
229
		return $levelCount;
230
	}
231
 
232
	/**
233
	 * Get Series Data Values
234
	 *
235
	 * @return	array of mixed
236
	 */
237
	public function getDataValues() {
238
		return $this->_dataValues;
239
	}
240
 
241
	/**
242
	 * Get the first Series Data value
243
	 *
244
	 * @return	mixed
245
	 */
246
	public function getDataValue() {
247
		$count = count($this->_dataValues);
248
		if ($count == 0) {
249
			return null;
250
		} elseif ($count == 1) {
251
			return $this->_dataValues[0];
252
		}
253
		return $this->_dataValues;
254
	}
255
 
256
	/**
257
	 * Set Series Data Values
258
	 *
259
	 * @param	array	$dataValues
260
	 * @param	boolean	$refreshDataSource
261
	 *					TRUE - refresh the value of _dataSource based on the values of $dataValues
262
	 *					FALSE - don't change the value of _dataSource
263
	 * @return	PHPExcel_Chart_DataSeriesValues
264
	 */
265
	public function setDataValues($dataValues = array(), $refreshDataSource = TRUE) {
266
		$this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($dataValues);
267
		$this->_pointCount = count($dataValues);
268
 
269
		if ($refreshDataSource) {
270
			//	TO DO
271
		}
272
 
273
		return $this;
274
	}
275
 
276
	private function _stripNulls($var) {
277
		return $var !== NULL;
278
	}
279
 
280
	public function refresh(PHPExcel_Worksheet $worksheet, $flatten = TRUE) {
281
        if ($this->_dataSource !== NULL) {
282
        	$calcEngine = PHPExcel_Calculation::getInstance($worksheet->getParent());
283
			$newDataValues = PHPExcel_Calculation::_unwrapResult(
284
			    $calcEngine->_calculateFormulaValue(
285
			        '='.$this->_dataSource,
286
			        NULL,
287
			        $worksheet->getCell('A1')
288
			    )
289
			);
290
			if ($flatten) {
291
				$this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues);
292
				foreach($this->_dataValues as &$dataValue) {
293
					if ((!empty($dataValue)) && ($dataValue[0] == '#')) {
294
						$dataValue = 0.0;
295
					}
296
				}
297
				unset($dataValue);
298
			} else {
299
				$cellRange = explode('!',$this->_dataSource);
300
				if (count($cellRange) > 1) {
301
					list(,$cellRange) = $cellRange;
302
				}
303
 
304
				$dimensions = PHPExcel_Cell::rangeDimension(str_replace('$','',$cellRange));
305
				if (($dimensions[0] == 1) || ($dimensions[1] == 1)) {
306
					$this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues);
307
				} else {
308
					$newArray = array_values(array_shift($newDataValues));
309
					foreach($newArray as $i => $newDataSet) {
310
						$newArray[$i] = array($newDataSet);
311
					}
312
 
313
					foreach($newDataValues as $newDataSet) {
314
						$i = 0;
315
						foreach($newDataSet as $newDataVal) {
316
							array_unshift($newArray[$i++],$newDataVal);
317
						}
318
					}
319
					$this->_dataValues = $newArray;
320
				}
321
			}
322
			$this->_pointCount = count($this->_dataValues);
323
		}
324
 
325
	}
326
 
327
}