This is a historic idiosyncracy, that is retained for backward compatibility. It would be nice to make this consistent, but it would break a lot of existing code were we to do so.
The API docs for the respective methods do indicate the base
* Column index from string
* @param string $pString
* @return int Column index (base 1 !!!)
* @throws Exception
public static function columnIndexFromString($pString = 'A')
* String from columnindex
* @param int $pColumnIndex Column index (base 0 !!!)
* @return string
public static function stringFromColumnIndex($pColumnIndex = 0)
When in doubt, or there is a discrepancy, the API docs should always be treated as the accurate document.