Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.

Differences Between: [Versions 310 and 400] [Versions 39 and 400]

   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 => column letters */
  12      private static $columnIndexToColumnLettersCache = [];
  13  
  14      /**
  15       * Returns the column letters (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 $columnIndexZeroBased The Excel column index (0, 42, ...)
  21       *
  22       * @return string The associated cell index ('A', 'BC', ...)
  23       */
  24      public static function getColumnLettersFromColumnIndex($columnIndexZeroBased)
  25      {
  26          $originalColumnIndex = $columnIndexZeroBased;
  27  
  28          // Using isset here because it is way faster than array_key_exists...
  29          if (!isset(self::$columnIndexToColumnLettersCache[$originalColumnIndex])) {
  30              $columnLetters = '';
  31              $capitalAAsciiValue = \ord('A');
  32  
  33              do {
  34                  $modulus = $columnIndexZeroBased % 26;
  35                  $columnLetters = \chr($capitalAAsciiValue + $modulus) . $columnLetters;
  36  
  37                  // substracting 1 because it's zero-based
  38                  $columnIndexZeroBased = (int) ($columnIndexZeroBased / 26) - 1;
  39              } while ($columnIndexZeroBased >= 0);
  40  
  41              self::$columnIndexToColumnLettersCache[$originalColumnIndex] = $columnLetters;
  42          }
  43  
  44          return self::$columnIndexToColumnLettersCache[$originalColumnIndex];
  45      }
  46  }