Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 39 and 311] [Versions 39 and 400] [Versions 39 and 401]

   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      public static function getCellIndexFromColumnIndex($columnIndex)
  24      {
  25          $originalColumnIndex = $columnIndex;
  26  
  27          // Using isset here because it is way faster than array_key_exists...
  28          if (!isset(self::$columnIndexToCellIndexCache[$originalColumnIndex])) {
  29              $cellIndex = '';
  30              $capitalAAsciiValue = ord('A');
  31  
  32              do {
  33                  $modulus = $columnIndex % 26;
  34                  $cellIndex = chr($capitalAAsciiValue + $modulus) . $cellIndex;
  35  
  36                  // substracting 1 because it's zero-based
  37                  $columnIndex = (int) ($columnIndex / 26) - 1;
  38              } while ($columnIndex >= 0);
  39  
  40              self::$columnIndexToCellIndexCache[$originalColumnIndex] = $cellIndex;
  41          }
  42  
  43          return self::$columnIndexToCellIndexCache[$originalColumnIndex];
  44      }
  45  }