原文:phpexcel导出超过26列解决方案

将列的数字序号转成字母使用,代码如下:
 

PHPExcel_Cell::stringFromColumnIndex($i); // 从o,1,2,3,..开始,相应返回返回 A,B,C,...Z,AA,AB,...

 

将列的字母转成数字序号使用,代码如下:

 
PHPExcel_Cell::columnIndexFromString('AA');
 
 
使用phpexcel导出excel文件的时候,发现报了一个错误,后来查询问题才发现是列数超过26列的问题。原先的代码:
 
//$content是一个需要导出的数组
$maxColumn = count($content[0]);
$maxRow    =
count($content);
for ($i = 0; $i < $maxColumn; $i++) {
    for ($j = 0; $j <
$maxRow; $j++) {
     
  $pCoordinate = chr(65+$i) . '' . ($j + 1);
     
  $pValue    
 = $content[$j][$i];
     
 
$objPHPExcel->getActiveSheet()->setCellValue($pCoordinate,
$pValue);
    }
}
代码中只是将列直接转换为字母,没有考虑到超过26列的情况,超过26列后,chr(65+$i)就变成“[”符号了。
 
excel行列表示方式
 
excel的列的表示规则从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的整数部分和模部分计算出列的表示字母就可以了。当然phpexcel早就考虑到这个问题了,所以呢不用自己计算,只需要直接调用PHPExcel_Cell类中的stringFromColumnIndex方法就可以了。
 
/**
 *    
String from columnindex
 *
 *    
@param    int $pColumnIndex
Column index (base 0 !!!)
 *    
@return    string
 */
public static function stringFromColumnIndex($pColumnIndex =
0) {
    //  
 Using a lookup cache adds a slight memory
overhead, but boosts speed
    //  
 caching using a static within the method is
faster than a class static,
    //  
     though it's
additional memory overhead
    static $_indexCache =
array();
 
    if
(!isset($_indexCache[$pColumnIndex])) {
     
  // Determine column string
     
  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];
}
可以看出这个方法针对26列内,26到702列,超过702列都进行了处理,最后就是返回A、B、C、AA、AB这样的字符。对一开始的错误代码改进一下:
 
//$content是一个需要导出的数组
$maxColumn = count($content[0]);
$maxRow    =
count($content);
for ($i = 0; $i < $maxColumn; $i++) {
    for ($j = 0; $j <
$maxRow; $j++) {
     
  $pCoordinate =
PHPExcel_Cell::stringFromColumnIndex($i) . '' . ($j + 1);
     
  $pValue    
 = $content[$j][$i];
     
 
$objPHPExcel->getActiveSheet()->setCellValue($pCoordinate,
$pValue);
    }
}
 
 
from:
http://www.01happy.com/phpexcel-column-more-than-26/
 
 

phpexcel导出超过26列解决方案的更多相关文章

  1. phpexcel 导入超过26列时的解决方案

    $highestColumn = $sheet->getHighestColumn(); // 取得总列数 ++$highestColumn; for ($row = 5; $row <= ...

  2. phpexcel 导入超过26列、处理时间格式

    见地址:http://www.thinkphp.cn/topic/33376.html excel处理时间: https://blog.csdn.net/xqd890608/article/detai ...

  3. PHPExcel导出数据时字段超过26列出错Invalid cell coordinate [1

    http://blog.csdn.net/dl425134845/article/details/46650961 以下是解决方案函数 /** *   方法名:    getExcel *   作用  ...

  4. yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法

    作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension​ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  5. phpexcel 生成大于26列数据

    function excelExport2($fileName = '', $headArr = [], $data = [], $widths=[]) { ob_clean(); // $fileN ...

  6. phpexcel如何读和写大于26列的excel

    主要运用到PHPExcel_Cell类的两个方法 1读取excel大于26列时. PHPExcel_Cell::columnIndexFromString($highestColumm)://由列名转 ...

  7. phpexcel导出数据 出现Formula Error的解决方案

    phpexcel导出数据报错 Uncaught exception 'Exception' with message 'Sheet1!A1364 -> Formula Error: Unexpe ...

  8. phpExcel导出excel加超级链接的实例代码[转]

    phpexcel实现的导出excel文件的代码,且可以在excel文件中加入超级链接. 说明:PHPExcel的开发包Tests目录有详细使用实例.以下代码支持中文,注意文件编码,文件保存为utf-8 ...

  9. 利用PHPExcel导出excel 以及利用js导出excel

    导出excel的方法output_excel需要依赖PHPExcel 导出csv的方法csv_export不需要 <?php /** * @author ttt */ class ExcelCo ...

随机推荐

  1. uml精粹——11.活动图(及整个读书笔记分享)

    11.活动图activity diagram   活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...

  2. Oracle中的sid与servicename

    在平时自己创建库的时候,习惯的将sid与servicename取同名,但是在实际生产中这两个名字很有可能不一致,再使用jdbc连接数据库的url时就需要注意区分了,否则创建不了数据库连接 //serv ...

  3. TCP协议的一些认识及实践

    http://www.2cto.com/net/201210/163047.html 一.简介 引用<TCP/IP详解-卷1>中的介绍,TCP与UDP使用相同的网络层(IP层),TCP却向 ...

  4. 谷歌 AI 中国中心成立,人工智能势不可挡?

    昨日,谷歌在上海举办了一年一度的Google中国开发者大会.在本届大会上,谷歌云首席科学家李飞飞宣布了一个重磅消息,即在北京将成立谷歌AI中国中心.对于这个即将成立的AI中心谷歌寄予厚望,希望与中国本 ...

  5. hbase 2.0.2 增删改查

    package cn.hbase.demo; import java.io.IOException; import java.util.Iterator; import org.apache.hado ...

  6. 微信Android终端SDK新手使用指南

    1.申请你的AppID 请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发.但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用. 2.下 ...

  7. C#3 分部方法,简单标记一下

    如果我问你,如果一个普通的类实现了一个接口方法,但是这个类的实例却访问不到这个接口的方法,这种情况你遇到过吗?有时候,你可能在使用分部方法时就会发现这么一个现象. C#3 中出现了 “分部方法” ,工 ...

  8. Cython 的学习

    开发效率极高的 Python 一直因执行效率过低为人所诟病,Cython 由此诞生,特性介于 Python 和 C 语言之间. Cython 学习 1. Cython 是什么? 它是一个用来快速生成 ...

  9. C#连接Oracle数据库乱码问题

    C#连接Oracle数据库乱码问题 数据库连接之前,设置环境变量,如下 Environment.SetEnvironmentVariable("NLS_LANG", "A ...

  10. UVa 12657 Boxes in a Line(应用双链表)

    Boxes in a Line You have n boxes in a line on the table numbered 1 . . . n from left to right. Your ...