千家信息网

PHPSpreadsheet导出Excel超过26列怎么办

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,小编给大家分享一下PHPSpreadsheet导出Excel超过26列怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!excel 行列表示方式xexcel 的列的表示规则从 A,
千家信息网最后更新 2025年11月15日PHPSpreadsheet导出Excel超过26列怎么办

小编给大家分享一下PHPSpreadsheet导出Excel超过26列怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

excel 行列表示方式

  • xexcel 的列的表示规则从 A,B,C 一直到 Z,当超过 26 个字母的时候用两个字母进行表示:AA,AB,AC…AZ,BA,BB,BC…BZ…,当超过 702 时又是另外一个种表示方法。

  • 行的表示就是 1,2,3,4,5,6,7…. 这样下去。在 phpexcel 中要设一个单元格的值通过 setCellValue 方法就可以了,其中第一个参数表示列和行的拼接的值,如:A1,B1,AA1,BA1 这样。

知道这个之后,只要根据 $i/26 的整数部分和模部分计算出列的表示字母就可以了。

下面是解决方法

data_type= $data_type;        $this->spread_sheet= $spread_sheet;        $this->x_lsx= $x_lsx;    }    /**    * @ description 文件导出    * @ date 2019-05-06    * @ array $field_name 字段名称 汉字(索引数组) ['产品','姓名']    * @ array $data 数据 ['a' => data, 'b' => data]    * @ array $field_column 数据中的下标名称 字段数据 (索引数组) ['a','b']    * @ string $file_name 文件名称    * @ array $arr 需要转换为数字的$field_column中的key(索引数组)    * @ return  file    */    public function export($field_name,$data,$field_column,$file_name,$field_numeric_keys= [])    {        @ob_clean();        if (empty($field_name)|| empty($field_column)|| empty($data)|| empty($file_name))return false;        $sheet= $this->spread_sheet->getActiveSheet();        //设置header        $i= 0;        foreach ($field_name as $value) {            $cellName= self::stringFromColumnIndex($i). "1";            $sheet->setCellValue($cellName, $value)->calculateColumnWidths();            $sheet->getColumnDimension(self::stringFromColumnIndex($i))->setWidth(15);            $i++;        }        //设置value        $len= count($field_column);        foreach ($data as $key=> $item) {            $row= 2 + ($key* 1);            for ($i= 0; $i< $len; $i++) {                $sheet->setCellValueExplicit(self::stringFromColumnIndex($i). $row, $item[$field_column[$i]]??"", DataType::TYPE_STRING);                if (isset($item[$field_column[$i]])&& !empty($field_numeric_keys)&& in_array($field_column[$i],$field_numeric_keys)) {                $sheet->setCellValueExplicit(self::stringFromColumnIndex($i). $row, $item[$field_column[$i]]??"", DataType::TYPE_NUMERIC);                }            }        }        $writer= new Xlsx($this->spread_sheet);        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器输出07Excel文件        header('Content-Disposition: attachment;filename="' . $file_name . '.xlsx"');//告诉浏览器输出浏览器名称        header('Cache-Control: max-age=0');        $writer->save('php://output');        @ob_flush();        @flush();        exit;    }    /**    * @ description excel导出突破只能26个字段    * @ date 2019-05-07    * @ return  string 字段    */    public static function stringFromColumnIndex($pColumnIndex = 0)    {        static $_indexCache= array();        if (!isset($_indexCache[$pColumnIndex])) {            if ($pColumnIndex < 26) {                $_indexCache[$pColumnIndex]= chr(65 + $pColumnIndex);            }elseif ($pColumnIndex < 702) {                $_indexCache[$pColumnIndex]= chr(64 + ($pColumnIndex / 26)). chr(65 + $pColumnIndex % 26);            }else {                $_indexCache[$pColumnIndex]= chr(64 + (($pColumnIndex - 26)/ 676)). chr(65 + ((($pColumnIndex - 26)% 676)/ 26)). chr(65 + $pColumnIndex % 26);            }        }        return $_indexCache[$pColumnIndex];    }}

看完了这篇文章,相信你对"PHPSpreadsheet导出Excel超过26列怎么办"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

0