Conditions | 66 |
Paths | 723 |
Total Lines | 242 |
Code Lines | 176 |
Lines | 98 |
Ratio | 40.5 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
207 | $this->openFile($pFilename); |
||
208 | if (!$this->isValidFormat()) { |
||
209 | fclose($this->fileHandle); |
||
210 | throw new Exception($pFilename . " is an Invalid Spreadsheet file."); |
||
211 | } |
||
212 | $fileHandle = $this->fileHandle; |
||
213 | rewind($fileHandle); |
||
214 | |||
215 | // Create new Worksheets |
||
216 | while ($spreadsheet->getSheetCount() <= $this->sheetIndex) { |
||
217 | $spreadsheet->createSheet(); |
||
218 | } |
||
219 | $spreadsheet->setActiveSheetIndex($this->sheetIndex); |
||
220 | |||
221 | $fromFormats = array('\-', '\ '); |
||
222 | $toFormats = array('-', ' '); |
||
223 | |||
224 | // Loop through file |
||
225 | $rowData = array(); |
||
226 | $column = $row = ''; |
||
227 | |||
228 | // loop through one row (line) at a time in the file |
||
229 | while (($rowData = fgets($fileHandle)) !== false) { |
||
230 | // convert SYLK encoded $rowData to UTF-8 |
||
231 | $rowData = \PhpSpreadsheet\Shared\StringHelper::SYLKtoUTF8($rowData); |
||
232 | |||
233 | // explode each row at semicolons while taking into account that literal semicolon (;) |
||
234 | // is escaped like this (;;) |
||
235 | $rowData = explode("\t", str_replace('¤', ';', str_replace(';', "\t", str_replace(';;', '¤', rtrim($rowData))))); |
||
236 | |||
237 | $dataType = array_shift($rowData); |
||
238 | // Read shared styles |
||
239 | if ($dataType == 'P') { |
||
240 | $formatArray = array(); |
||
241 | foreach ($rowData as $rowDatum) { |
||
242 | switch ($rowDatum{0}) { |
||
243 | case 'P': |
||
244 | $formatArray['numberformat']['code'] = str_replace($fromFormats, $toFormats, substr($rowDatum, 1)); |
||
245 | break; |
||
246 | case 'E': |
||
247 | case 'F': |
||
248 | $formatArray['font']['name'] = substr($rowDatum, 1); |
||
249 | break; |
||
250 | case 'L': |
||
251 | $formatArray['font']['size'] = substr($rowDatum, 1); |
||
252 | break; |
||
253 | View Code Duplication | case 'S': |
|
254 | $styleSettings = substr($rowDatum, 1); |
||
255 | for ($i=0; $i<strlen($styleSettings); ++$i) { |
||
256 | switch ($styleSettings{$i}) { |
||
257 | case 'I': |
||
258 | $formatArray['font']['italic'] = true; |
||
259 | break; |
||
260 | case 'D': |
||
261 | $formatArray['font']['bold'] = true; |
||
262 | break; |
||
263 | case 'T': |
||
264 | $formatArray['borders']['top']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
265 | break; |
||
266 | case 'B': |
||
267 | $formatArray['borders']['bottom']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
268 | break; |
||
269 | case 'L': |
||
270 | $formatArray['borders']['left']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
271 | break; |
||
272 | case 'R': |
||
273 | $formatArray['borders']['right']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
274 | break; |
||
275 | } |
||
276 | } |
||
277 | break; |
||
278 | } |
||
279 | } |
||
280 | $this->formats['P'.$this->format++] = $formatArray; |
||
281 | // Read cell value data |
||
282 | } elseif ($dataType == 'C') { |
||
283 | $hasCalculatedValue = false; |
||
284 | $cellData = $cellDataFormula = ''; |
||
285 | foreach ($rowData as $rowDatum) { |
||
286 | switch ($rowDatum{0}) { |
||
287 | case 'C': |
||
288 | case 'X': |
||
289 | $column = substr($rowDatum, 1); |
||
290 | break; |
||
291 | case 'R': |
||
292 | case 'Y': |
||
293 | $row = substr($rowDatum, 1); |
||
294 | break; |
||
295 | case 'K': |
||
296 | $cellData = substr($rowDatum, 1); |
||
297 | break; |
||
298 | case 'E': |
||
299 | $cellDataFormula = '='.substr($rowDatum, 1); |
||
300 | // Convert R1C1 style references to A1 style references (but only when not quoted) |
||
301 | $temp = explode('"', $cellDataFormula); |
||
302 | $key = false; |
||
303 | View Code Duplication | foreach ($temp as &$value) { |
|
304 | // Only count/replace in alternate array entries |
||
305 | if ($key = !$key) { |
||
306 | preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/', $value, $cellReferences, PREG_SET_ORDER+PREG_OFFSET_CAPTURE); |
||
307 | // Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way |
||
308 | // through the formula from left to right. Reversing means that we work right to left.through |
||
309 | // the formula |
||
310 | $cellReferences = array_reverse($cellReferences); |
||
311 | // Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent, |
||
312 | // then modify the formula to use that new reference |
||
313 | foreach ($cellReferences as $cellReference) { |
||
314 | $rowReference = $cellReference[2][0]; |
||
315 | // Empty R reference is the current row |
||
316 | if ($rowReference == '') { |
||
317 | $rowReference = $row; |
||
318 | } |
||
319 | // Bracketed R references are relative to the current row |
||
320 | if ($rowReference{0} == '[') { |
||
321 | $rowReference = $row + trim($rowReference, '[]'); |
||
322 | } |
||
323 | $columnReference = $cellReference[4][0]; |
||
324 | // Empty C reference is the current column |
||
325 | if ($columnReference == '') { |
||
326 | $columnReference = $column; |
||
327 | } |
||
328 | // Bracketed C references are relative to the current column |
||
329 | if ($columnReference{0} == '[') { |
||
330 | $columnReference = $column + trim($columnReference, '[]'); |
||
331 | } |
||
332 | $A1CellReference = \PhpSpreadsheet\Cell::stringFromColumnIndex($columnReference-1).$rowReference; |
||
333 | |||
334 | $value = substr_replace($value, $A1CellReference, $cellReference[0][1], strlen($cellReference[0][0])); |
||
335 | } |
||
336 | } |
||
337 | } |
||
338 | unset($value); |
||
339 | // Then rebuild the formula string |
||
340 | $cellDataFormula = implode('"', $temp); |
||
341 | $hasCalculatedValue = true; |
||
342 | break; |
||
343 | } |
||
344 | } |
||
345 | $columnLetter = \PhpSpreadsheet\Cell::stringFromColumnIndex($column-1); |
||
346 | $cellData = \PhpSpreadsheet\Calculation::unwrapResult($cellData); |
||
347 | |||
348 | // Set cell value |
||
349 | $spreadsheet->getActiveSheet()->getCell($columnLetter.$row)->setValue(($hasCalculatedValue) ? $cellDataFormula : $cellData); |
||
350 | if ($hasCalculatedValue) { |
||
351 | $cellData = \PhpSpreadsheet\Calculation::unwrapResult($cellData); |
||
352 | $spreadsheet->getActiveSheet()->getCell($columnLetter.$row)->setCalculatedValue($cellData); |
||
353 | } |
||
354 | // Read cell formatting |
||
355 | } elseif ($dataType == 'F') { |
||
356 | $formatStyle = $columnWidth = $styleSettings = ''; |
||
357 | $styleData = array(); |
||
358 | foreach ($rowData as $rowDatum) { |
||
359 | switch ($rowDatum{0}) { |
||
360 | case 'C': |
||
361 | case 'X': |
||
362 | $column = substr($rowDatum, 1); |
||
363 | break; |
||
364 | case 'R': |
||
365 | case 'Y': |
||
366 | $row = substr($rowDatum, 1); |
||
367 | break; |
||
368 | case 'P': |
||
369 | $formatStyle = $rowDatum; |
||
370 | break; |
||
371 | case 'W': |
||
372 | list($startCol, $endCol, $columnWidth) = explode(' ', substr($rowDatum, 1)); |
||
373 | break; |
||
374 | View Code Duplication | case 'S': |
|
375 | $styleSettings = substr($rowDatum, 1); |
||
376 | for ($i=0; $i<strlen($styleSettings); ++$i) { |
||
377 | switch ($styleSettings{$i}) { |
||
378 | case 'I': |
||
379 | $styleData['font']['italic'] = true; |
||
380 | break; |
||
381 | case 'D': |
||
382 | $styleData['font']['bold'] = true; |
||
383 | break; |
||
384 | case 'T': |
||
385 | $styleData['borders']['top']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
386 | break; |
||
387 | case 'B': |
||
388 | $styleData['borders']['bottom']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
389 | break; |
||
390 | case 'L': |
||
391 | $styleData['borders']['left']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
392 | break; |
||
393 | case 'R': |
||
394 | $styleData['borders']['right']['style'] = \PhpSpreadsheet\Style\Border::BORDER_THIN; |
||
395 | break; |
||
396 | } |
||
397 | } |
||
398 | break; |
||
399 | } |
||
400 | } |
||
401 | if (($formatStyle > '') && ($column > '') && ($row > '')) { |
||
402 | $columnLetter = \PhpSpreadsheet\Cell::stringFromColumnIndex($column-1); |
||
403 | View Code Duplication | if (isset($this->formats[$formatStyle])) { |
|
404 | $spreadsheet->getActiveSheet()->getStyle($columnLetter.$row)->applyFromArray($this->formats[$formatStyle]); |
||
405 | } |
||
406 | } |
||
407 | if ((!empty($styleData)) && ($column > '') && ($row > '')) { |
||
408 | $columnLetter = \PhpSpreadsheet\Cell::stringFromColumnIndex($column-1); |
||
409 | $spreadsheet->getActiveSheet()->getStyle($columnLetter.$row)->applyFromArray($styleData); |
||
410 | } |
||
411 | if ($columnWidth > '') { |
||
412 | if ($startCol == $endCol) { |
||
413 | $startCol = \PhpSpreadsheet\Cell::stringFromColumnIndex($startCol-1); |
||
414 | $spreadsheet->getActiveSheet()->getColumnDimension($startCol)->setWidth($columnWidth); |
||
415 | } else { |
||
416 | $startCol = \PhpSpreadsheet\Cell::stringFromColumnIndex($startCol-1); |
||
417 | $endCol = \PhpSpreadsheet\Cell::stringFromColumnIndex($endCol-1); |
||
418 | $spreadsheet->getActiveSheet()->getColumnDimension($startCol)->setWidth($columnWidth); |
||
419 | do { |
||
420 | $spreadsheet->getActiveSheet()->getColumnDimension(++$startCol)->setWidth($columnWidth); |
||
421 | } while ($startCol != $endCol); |
||
422 | } |
||
423 | } |
||
424 | } else { |
||
425 | foreach ($rowData as $rowDatum) { |
||
426 | View Code Duplication | switch ($rowDatum{0}) { |
|
427 | case 'C': |
||
428 | case 'X': |
||
429 | $column = substr($rowDatum, 1); |
||
430 | break; |
||
431 | case 'R': |
||
432 | case 'Y': |
||
433 | $row = substr($rowDatum, 1); |
||
434 | break; |
||
435 | } |
||
436 | } |
||
437 | } |
||
438 | } |
||
439 | |||
440 | // Close file |
||
441 | fclose($fileHandle); |
||
442 | |||
443 | // Return |
||
444 | return $spreadsheet; |
||
445 | } |
||
446 | |||
447 | /** |
||
448 | * Get sheet index |
||
449 | * |
||
469 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.