1: <?php
2: /**
3: * PHPExcel
4: *
5: * Copyright (c) 2006 - 2014 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
23: * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24: * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25: * @version 1.8.0, 2014-03-02
26: */
27:
28:
29: /**
30: * PHPExcel_NamedRange
31: *
32: * @category PHPExcel
33: * @package PHPExcel
34: * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
35: */
36: class PHPExcel_NamedRange
37: {
38: /**
39: * Range name
40: *
41: * @var string
42: */
43: private $_name;
44:
45: /**
46: * Worksheet on which the named range can be resolved
47: *
48: * @var PHPExcel_Worksheet
49: */
50: private $_worksheet;
51:
52: /**
53: * Range of the referenced cells
54: *
55: * @var string
56: */
57: private $_range;
58:
59: /**
60: * Is the named range local? (i.e. can only be used on $this->_worksheet)
61: *
62: * @var bool
63: */
64: private $_localOnly;
65:
66: /**
67: * Scope
68: *
69: * @var PHPExcel_Worksheet
70: */
71: private $_scope;
72:
73: /**
74: * Create a new NamedRange
75: *
76: * @param string $pName
77: * @param PHPExcel_Worksheet $pWorksheet
78: * @param string $pRange
79: * @param bool $pLocalOnly
80: * @param PHPExcel_Worksheet|null $pScope Scope. Only applies when $pLocalOnly = true. Null for global scope.
81: * @throws PHPExcel_Exception
82: */
83: public function __construct($pName = null, PHPExcel_Worksheet $pWorksheet, $pRange = 'A1', $pLocalOnly = false, $pScope = null)
84: {
85: // Validate data
86: if (($pName === NULL) || ($pWorksheet === NULL) || ($pRange === NULL)) {
87: throw new PHPExcel_Exception('Parameters can not be null.');
88: }
89:
90: // Set local members
91: $this->_name = $pName;
92: $this->_worksheet = $pWorksheet;
93: $this->_range = $pRange;
94: $this->_localOnly = $pLocalOnly;
95: $this->_scope = ($pLocalOnly == true) ?
96: (($pScope == null) ? $pWorksheet : $pScope) : null;
97: }
98:
99: /**
100: * Get name
101: *
102: * @return string
103: */
104: public function getName() {
105: return $this->_name;
106: }
107:
108: /**
109: * Set name
110: *
111: * @param string $value
112: * @return PHPExcel_NamedRange
113: */
114: public function setName($value = null) {
115: if ($value !== NULL) {
116: // Old title
117: $oldTitle = $this->_name;
118:
119: // Re-attach
120: if ($this->_worksheet !== NULL) {
121: $this->_worksheet->getParent()->removeNamedRange($this->_name,$this->_worksheet);
122: }
123: $this->_name = $value;
124:
125: if ($this->_worksheet !== NULL) {
126: $this->_worksheet->getParent()->addNamedRange($this);
127: }
128:
129: // New title
130: $newTitle = $this->_name;
131: PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->_worksheet->getParent(), $oldTitle, $newTitle);
132: }
133: return $this;
134: }
135:
136: /**
137: * Get worksheet
138: *
139: * @return PHPExcel_Worksheet
140: */
141: public function getWorksheet() {
142: return $this->_worksheet;
143: }
144:
145: /**
146: * Set worksheet
147: *
148: * @param PHPExcel_Worksheet $value
149: * @return PHPExcel_NamedRange
150: */
151: public function setWorksheet(PHPExcel_Worksheet $value = null) {
152: if ($value !== NULL) {
153: $this->_worksheet = $value;
154: }
155: return $this;
156: }
157:
158: /**
159: * Get range
160: *
161: * @return string
162: */
163: public function getRange() {
164: return $this->_range;
165: }
166:
167: /**
168: * Set range
169: *
170: * @param string $value
171: * @return PHPExcel_NamedRange
172: */
173: public function setRange($value = null) {
174: if ($value !== NULL) {
175: $this->_range = $value;
176: }
177: return $this;
178: }
179:
180: /**
181: * Get localOnly
182: *
183: * @return bool
184: */
185: public function getLocalOnly() {
186: return $this->_localOnly;
187: }
188:
189: /**
190: * Set localOnly
191: *
192: * @param bool $value
193: * @return PHPExcel_NamedRange
194: */
195: public function setLocalOnly($value = false) {
196: $this->_localOnly = $value;
197: $this->_scope = $value ? $this->_worksheet : null;
198: return $this;
199: }
200:
201: /**
202: * Get scope
203: *
204: * @return PHPExcel_Worksheet|null
205: */
206: public function getScope() {
207: return $this->_scope;
208: }
209:
210: /**
211: * Set scope
212: *
213: * @param PHPExcel_Worksheet|null $value
214: * @return PHPExcel_NamedRange
215: */
216: public function setScope(PHPExcel_Worksheet $value = null) {
217: $this->_scope = $value;
218: $this->_localOnly = ($value == null) ? false : true;
219: return $this;
220: }
221:
222: /**
223: * Resolve a named range to a regular cell range
224: *
225: * @param string $pNamedRange Named range
226: * @param PHPExcel_Worksheet|null $pSheet Scope. Use null for global scope
227: * @return PHPExcel_NamedRange
228: */
229: public static function resolveRange($pNamedRange = '', PHPExcel_Worksheet $pSheet) {
230: return $pSheet->getParent()->getNamedRange($pNamedRange, $pSheet);
231: }
232:
233: /**
234: * Implement PHP __clone to create a deep clone, not just a shallow copy.
235: */
236: public function __clone() {
237: $vars = get_object_vars($this);
238: foreach ($vars as $key => $value) {
239: if (is_object($value)) {
240: $this->$key = clone $value;
241: } else {
242: $this->$key = $value;
243: }
244: }
245: }
246: }
247: