PHP10进制转26进制(A-Z)代码 PHPExcel导出列超过26列解决方法

今天客户给我反映了一个之前做的自定义表单系统问题,导出报表出错,我导出报表用的是PHPExcel。看了一下错误信息是“Invalid cell coordinate [1”,直接懵逼,黑人问号???

百度翻译了一下,应该是“无效的单元格坐标”,然而我写的代码怎么可能有错,我这边都是好的。(程序员:我这里都是好的)

后来发现客户自定义超过了26项,导出报表时候超出了26列,也就是26个英文字母用光了。。。ASCII码表的Z后面就是[,正好对应了上面的错误信息。

又百度了下,超过26列的情况下,excel要用AA1这样列行来对应单元格了。所以我们需要一个10进制转26进制的代码,懒的写,所以直接百度,还真有!作者是OSC的 @明澈,下面代码与作者的相比略有修改。

    /**
     * 获取excel表格里指定单元的名称索引
     *    如第1行第1列:
     *        返回A1
     *    第27行第二列:
     *        返回AA1:
     * @param int $col 列,从1开始
     * @param int $row 行,从1开始
     * @return string
     */
    function getExcelCeilIndex($col, $row)
    {
        if($row > 0 && $col > 0)
        {
            $str = 'ZABCDEFGHIGKLMNOPQRSTUVWXY';
            $col_str = '';
            do
            {
                $col_tmp = $col % 26;
                $col = $col_tmp == 0 ? intval($col / 26) - 1 : intval($col / 26);
                $col_str = $str[$col_tmp] . $col_str;
            }while($col);
            return $col_str . $row;
        }
        return false;
    }


  • 发表评论
当前用户:
  • 评论列表