@@ -42,15 +42,16 @@ class ColumnCellIterator extends CellIterator
42
42
/**
43
43
* Create a new row iterator.
44
44
*
45
- * @param Worksheet $subject The worksheet to iterate over
45
+ * @param Worksheet $worksheet The worksheet to iterate over
46
46
* @param string $columnIndex The column that we want to iterate
47
47
* @param int $startRow The row number at which to start iterating
48
48
* @param int $endRow Optionally, the row number at which to stop iterating
49
49
*/
50
- public function __construct (Worksheet $ subject , $ columnIndex = 'A ' , $ startRow = 1 , $ endRow = null )
50
+ public function __construct (Worksheet $ worksheet , $ columnIndex = 'A ' , $ startRow = 1 , $ endRow = null )
51
51
{
52
52
// Set subject
53
- $ this ->worksheet = $ subject ;
53
+ $ this ->worksheet = $ worksheet ;
54
+ $ this ->cellCollection = $ worksheet ->getCellCollection ();
54
55
$ this ->columnIndex = Coordinate::columnIndexFromString ($ columnIndex );
55
56
$ this ->resetEnd ($ endRow );
56
57
$ this ->resetStart ($ startRow );
@@ -96,7 +97,10 @@ public function resetEnd($endRow = null)
96
97
*/
97
98
public function seek (int $ row = 1 )
98
99
{
99
- if ($ this ->onlyExistingCells && !($ this ->worksheet ->cellExistsByColumnAndRow ($ this ->columnIndex , $ row ))) {
100
+ if (
101
+ $ this ->onlyExistingCells &&
102
+ (!$ this ->cellCollection ->has (Coordinate::stringFromColumnIndex ($ this ->columnIndex ) . $ row ))
103
+ ) {
100
104
throw new PhpSpreadsheetException ('In "IterateOnlyExistingCells" mode and Cell does not exist ' );
101
105
}
102
106
if (($ row < $ this ->startRow ) || ($ row > $ this ->endRow )) {
@@ -122,8 +126,8 @@ public function current(): ?Cell
122
126
{
123
127
$ cellAddress = Coordinate::stringFromColumnIndex ($ this ->columnIndex ) . $ this ->currentRow ;
124
128
125
- return $ this ->worksheet -> getCellCollection () ->has ($ cellAddress )
126
- ? $ this ->worksheet -> getCellCollection () ->get ($ cellAddress )
129
+ return $ this ->cellCollection ->has ($ cellAddress )
130
+ ? $ this ->cellCollection ->get ($ cellAddress )
127
131
: $ this ->worksheet ->createNewCell ($ cellAddress );
128
132
}
129
133
@@ -140,12 +144,13 @@ public function key(): int
140
144
*/
141
145
public function next (): void
142
146
{
147
+ $ columnAddress = Coordinate::stringFromColumnIndex ($ this ->columnIndex );
143
148
do {
144
149
++$ this ->currentRow ;
145
150
} while (
146
151
($ this ->onlyExistingCells ) &&
147
- (! $ this ->worksheet -> cellExistsByColumnAndRow ( $ this -> columnIndex , $ this ->currentRow ) ) &&
148
- ($ this ->currentRow <= $ this ->endRow )
152
+ ($ this ->currentRow <= $ this ->endRow ) &&
153
+ (! $ this ->cellCollection -> has ( $ columnAddress . $ this ->currentRow ) )
149
154
);
150
155
}
151
156
@@ -154,12 +159,13 @@ public function next(): void
154
159
*/
155
160
public function prev (): void
156
161
{
162
+ $ columnAddress = Coordinate::stringFromColumnIndex ($ this ->columnIndex );
157
163
do {
158
164
--$ this ->currentRow ;
159
165
} while (
160
166
($ this ->onlyExistingCells ) &&
161
- (! $ this ->worksheet -> cellExistsByColumnAndRow ( $ this -> columnIndex , $ this ->currentRow ) ) &&
162
- ($ this ->currentRow >= $ this ->startRow )
167
+ ($ this ->currentRow >= $ this ->startRow ) &&
168
+ (! $ this ->cellCollection -> has ( $ columnAddress . $ this ->currentRow ) )
163
169
);
164
170
}
165
171
@@ -177,14 +183,15 @@ public function valid(): bool
177
183
protected function adjustForExistingOnlyRange (): void
178
184
{
179
185
if ($ this ->onlyExistingCells ) {
186
+ $ columnAddress = Coordinate::stringFromColumnIndex ($ this ->columnIndex );
180
187
while (
181
- (!$ this ->worksheet -> cellExistsByColumnAndRow ( $ this -> columnIndex , $ this ->startRow )) &&
188
+ (!$ this ->cellCollection -> has ( $ columnAddress . $ this ->startRow )) &&
182
189
($ this ->startRow <= $ this ->endRow )
183
190
) {
184
191
++$ this ->startRow ;
185
192
}
186
193
while (
187
- (!$ this ->worksheet -> cellExistsByColumnAndRow ( $ this -> columnIndex , $ this ->endRow )) &&
194
+ (!$ this ->cellCollection -> has ( $ columnAddress . $ this ->endRow )) &&
188
195
($ this ->endRow >= $ this ->startRow )
189
196
) {
190
197
--$ this ->endRow ;
0 commit comments