Failed Conditions
Pull Request — develop_3.0 (#507)
by Adrien
02:47
created

CellHelper::isNonEmptyString()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 2
eloc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Box\Spout\Writer\Common\Helper;
4
5
/**
6
 * Class CellHelper
7
 * This class provides helper functions when working with cells
8
 */
9
class CellHelper
10
{
11
    /** @var array Cache containing the mapping column index => cell index */
12
    private static $columnIndexToCellIndexCache = [];
13
14
    /**
15
     * Returns the cell index (base 26) associated to the base 10 column index.
16
     * Excel uses A to Z letters for column indexing, where A is the 1st column,
17
     * Z is the 26th and AA is the 27th.
18
     * The mapping is zero based, so that 0 maps to A, B maps to 1, Z to 25 and AA to 26.
19
     *
20
     * @param int $columnIndex The Excel column index (0, 42, ...)
21
     * @return string The associated cell index ('A', 'BC', ...)
22
     */
23 37
    public static function getCellIndexFromColumnIndex($columnIndex)
24
    {
25 37
        $originalColumnIndex = $columnIndex;
26
27
        // Using isset here because it is way faster than array_key_exists...
28 37
        if (!isset(self::$columnIndexToCellIndexCache[$originalColumnIndex])) {
29 7
            $cellIndex = '';
30 7
            $capitalAAsciiValue = ord('A');
31
32
            do {
33 7
                $modulus = $columnIndex % 26;
34 7
                $cellIndex = chr($capitalAAsciiValue + $modulus) . $cellIndex;
35
36
                // substracting 1 because it's zero-based
37 7
                $columnIndex = (int) ($columnIndex / 26) - 1;
38 7
            } while ($columnIndex >= 0);
39
40 7
            self::$columnIndexToCellIndexCache[$originalColumnIndex] = $cellIndex;
41
        }
42
43 37
        return self::$columnIndexToCellIndexCache[$originalColumnIndex];
44
    }
45
}
46