@@ -178,16 +178,18 @@ private function getRowReference(Cell $cell): string
178
178
foreach ($ this ->columns as $ columnId => $ columnName ) {
179
179
$ columnName = str_replace ("\u{a0}" , ' ' , $ columnName );
180
180
$ cellReference = $ columnId . $ cell ->getRow ();
181
+ $ pattern1 = '/\[ ' . preg_quote ($ columnName ) . '\]/miu ' ;
182
+ $ pattern2 = '/@ ' . preg_quote ($ columnName ) . '/miu ' ;
181
183
/** @var string $reference */
182
- if (stripos ( $ reference , " [ { $ columnName } ] " ) !== false ) {
183
- $ reference = preg_replace (' /\[ ' . preg_quote ( $ columnName ) . ' \]/miu ' , $ cellReference , $ reference );
184
- } elseif (stripos ( $ reference , " @ { $ columnName }" ) !== false ) {
185
- $ reference = preg_replace (' /@ ' . preg_quote ( $ columnName ) . ' /miu ' , $ cellReference , $ reference );
184
+ if (preg_match ( $ pattern1 , $ reference ) === 1 ) {
185
+ $ reference = preg_replace ($ pattern1 , $ cellReference , $ reference );
186
+ } elseif (preg_match ( $ pattern2 , $ reference ) === 1 ) {
187
+ $ reference = preg_replace ($ pattern2 , $ cellReference , $ reference );
186
188
}
187
189
}
188
190
189
191
/** @var string $reference */
190
- return $ this ->validateParsedReference (trim ($ reference , '[]@ ' ));
192
+ return $ this ->validateParsedReference (trim ($ reference , '[]@, ' ));
191
193
}
192
194
193
195
/**
@@ -208,17 +210,18 @@ private function getColumnReference(): string
208
210
$ cellFrom = "{$ columnId }{$ startRow }" ;
209
211
$ cellTo = "{$ columnId }{$ endRow }" ;
210
212
$ cellReference = ($ cellFrom === $ cellTo ) ? $ cellFrom : "{$ cellFrom }: {$ cellTo }" ;
213
+ $ pattern = '/\[ ' . preg_quote ($ columnName ) . '\]/mui ' ;
211
214
/** @var string $reference */
212
- if (stripos ( $ reference , " [ { $ columnName } ] " ) !== false ) {
215
+ if (preg_match ( $ pattern , $ reference ) === 1 ) {
213
216
$ columnsSelected = true ;
214
- $ reference = preg_replace (' /\[ ' . preg_quote ( $ columnName ) . ' \]/miu ' , $ cellReference , $ reference );
217
+ $ reference = preg_replace ($ pattern , $ cellReference , $ reference );
215
218
}
216
219
}
217
220
if ($ columnsSelected === false ) {
218
221
return $ this ->fullData ($ startRow , $ endRow );
219
222
}
220
223
221
- $ reference = trim ($ reference ?? '' , '[]@ ' );
224
+ $ reference = trim ($ reference ?? '' , '[]@, ' );
222
225
if (substr_count ($ reference , ': ' ) > 1 ) {
223
226
$ cells = explode (': ' , $ reference );
224
227
$ firstCell = array_shift ($ cells );
@@ -237,6 +240,7 @@ private function validateParsedReference(string $reference): string
237
240
{
238
241
if (preg_match ('/^ ' . Calculation::CALCULATION_REGEXP_CELLREF . ': ' . Calculation::CALCULATION_REGEXP_CELLREF . '$/miu ' , $ reference ) !== 1 ) {
239
242
if (preg_match ('/^ ' . Calculation::CALCULATION_REGEXP_CELLREF . '$/miu ' , $ reference ) !== 1 ) {
243
+
240
244
throw new Exception ("Invalid Structured Reference {$ this ->reference } {$ reference }" );
241
245
}
242
246
}
@@ -265,7 +269,7 @@ private function getMinimumRow(string $reference): int
265
269
return $ this ->totalsRow ?? $ this ->lastDataRow ;
266
270
}
267
271
268
- return 1 ;
272
+ return $ this -> headersRow ?? $ this -> firstDataRow ;
269
273
}
270
274
271
275
private function getMaximumRow (string $ reference ): int
@@ -280,7 +284,7 @@ private function getMaximumRow(string $reference): int
280
284
return $ this ->totalsRow ?? $ this ->lastDataRow ;
281
285
}
282
286
283
- return 1 ;
287
+ return $ this -> totalsRow ?? $ this -> lastDataRow ;
284
288
}
285
289
286
290
public function value (): string
@@ -295,12 +299,13 @@ public function getRowsForColumnReference(string &$reference, int $startRow, int
295
299
{
296
300
$ rowsSelected = false ;
297
301
foreach (self ::ITEM_SPECIFIER_ROWS_SET as $ rowReference ) {
302
+ $ pattern = '/\[ ' . $ rowReference . '\]/mui ' ;
298
303
/** @var string $reference */
299
- if (stripos ( $ reference , " [ { $ rowReference } ] " ) !== false ) {
304
+ if (preg_match ( $ pattern , $ reference ) === 1 ) {
300
305
$ rowsSelected = true ;
301
306
$ startRow = min ($ startRow , $ this ->getMinimumRow ($ rowReference ));
302
307
$ endRow = max ($ endRow , $ this ->getMaximumRow ($ rowReference ));
303
- $ reference = preg_replace (' /\[ ' . $ rowReference . ' \],/mui ' , '' , $ reference );
308
+ $ reference = preg_replace ($ pattern , '' , $ reference );
304
309
}
305
310
}
306
311
if ($ rowsSelected === false ) {
0 commit comments