A1 和 R1C1 引用列标签转换

2023/03/06 工具

Excel 关于引用有两种表示方法,即 A1 和 R1C1 引用样式。

A1 是 Excel 默认的引用类型。这种类型的列标签由字母标记(从 A 到 XFD,共 16384 列)。R1C1 类型中,列标签由数字标记。例如,A1 的列标签 A、B、C 分别对应 R1C1 列标签的 1、2、3。

以下代码中静态函数 A1toR1C1 将 A1 列标签转为 R1C1 类型,R1C1toA1 将 R1C1 列标签转为 A1 类型。

<?php
/**
* A1 与 R1C1 引用列标签转换
 */
class A1andR1C1Transfer
{
    const AlphaCount = 26;
    const BaseAlpha = 'A';

    public static function A1toR1C1($A1Column): float|int
    {
        $A1ColumnLen = strlen($A1Column);

        for ($i = $A1ColumnLen - 1, $pow = 0, $R1C1Column = 0; $i > -1; $i--, $pow++) {
            $tmp = ord($A1Column[$i]) - ord(self::BaseAlpha) + 1;
            $R1C1Column += $tmp * pow(self::AlphaCount, $pow);
        }
        return $R1C1Column;
    }

    public static function R1C1toA1($R1C1Column): string
    {
        $arr = [];
        while ($R1C1Column > 0) {
            $remain = ($R1C1Column -1) % self::AlphaCount;
            array_unshift($arr, chr(ord(self::BaseAlpha) + $remain));
            $R1C1Column = intval(($R1C1Column - $remain) / self::AlphaCount);
        }
        return implode('', $arr);
    }
}

Search

    Table of Contents