• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > PHPSpreadsheet导出Excel列数超过26报错怎么办?

PHPSpreadsheet导出Excel列数超过26报错怎么办?

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了PHPSpreadsheet导出Excel,Excel列数超过26报错,PHPSpreadsheet报错等相关知识,希望对您有所帮助

PHPSpreadsheet导出Excel列数超过26报错怎么办?下面本篇文章给大家介绍一下PhpSpreadsheet导出Excel超过26列解决办法,希望对大家有帮助。


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 的整数部分和模部分计算出列的表示字母就可以了。

下面是解决方法

<?phpnamespace AppLibrariesExcel;use PhpOfficePhpSpreadsheetCellDataType;use PhpOfficePhpSpreadsheetSpreadsheet;use PhpOfficePhpSpreadsheetWriterXlsx;class Export{    protected $data_type;    protected $spread_sheet;    protected $x_lsx;    public function __construct(DataType$data_type, Spreadsheet$spread_sheet, Xlsx$x_lsx)    {        $this->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];    }}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • PHPSpreadsheet导出Excel列数超过26报错怎么办?

相关文章

  • 2022-04-29PS打造中国风水墨草书毛笔书法字体设计制作教程
  • 2022-04-29Photoshop制作质感金属文字效果
  • 2022-04-29PS+AI打造一个中国风字体LOGO设计过程教程
  • 2022-04-29织梦后台非常卡,经常无反应怎么办
  • 2022-04-29如何解决php微信输出乱码
  • 2022-04-29掌握PHP中对数组进行排序的正确姿势
  • 2022-04-29Photoshop设计绚丽的3D艺术字教程
  • 2022-04-29AI和PS快速制作漂亮复古海报
  • 2022-04-29小程序中怎么进行父子组件传值和方法调用?(方法汇总)
  • 2022-04-29快速理解 JavaScript 的垃圾回收

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • PHP怎么上传图片改文件名
    • Seo职场新人要怎样才能把seo做好呢
    • 值得掌握一下支持Laravel 9的Aliyun OSS Storage扩展
    • css如何实现底部tapbar栏效果
    • DEDECMS让广告延时加载,提高网页打开速度
    • 如何解决php错误代码0x80070002问题
    • 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
    • 百度编辑器上传word文件转为html
    • 详解Laravel使用多数据库的方法(附代码示例)
    • WordPress国内网速慢加速及防DDOS攻击快速CF切换

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有