原文: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. 如何在PHP页面中原样输出HTML代码(是该找本php的数来看了)

    如何在PHP页面中原样输出HTML代码(是该找本php的数来看了) 一.总结 一句话总结:字符串与HTML之间的相互转换主要应用htmlentities()函数来完成. 1.php中的html标签如何 ...

  2. 怎么实现登录之后跳转到登录之前的页面?SpringMVC+Freemarker

    项目中,想实现一个功能. 直接访问某个需要登录的url,比如/addArticle,可能会跳转到登录页面login.html. 登录成功之后,自动跳转到/addArticle这个登录前的页面,继续登录 ...

  3. php课程 6-21 HTML标签相关函数

    php课程 6-21 HTML标签相关函数 一.总结 一句话总结:1.存入数据库的html标签代码:$info=addslashes(htmlspecialchars($_POST['info'])) ...

  4. webrtc 它android与PC互通

    折腾了一个多星期,今天终将PC和android音频,视频全部打通. 到现在,android与android,pC与PC,android与PC之间已经解决了互通,的音频和视频是能够. 前段时间开了PC与 ...

  5. 项目流程管理&amp;&amp;架构总结

    1 项目背景 所在业务在早期没有营销费用,买家购买商品的折扣优惠是由卖家提供的.全部订单的终于价格是由卖家和业务方确定的,整个购买流程非常easy. 如今此业务收受到公司重视,业务团队能申请到营销费用 ...

  6. java基础——try catch final

    1.不管有木有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此时并没有 ...

  7. OpenCL编译环境配置(VS+Nvidia)

    英伟达的显卡首先要下载安装CUDA开发包,可以参考这里的步骤:   VS2015编译环境下CUDA安装配置 安装好CUDA之后,OpenCL的配置就已经完成了80%了,剩下的工作就是把OpenCL的路 ...

  8. android游戏开发系列(2)——背景音乐播放技术

    背景音乐通常播放时间较长,且文件体积也相对较大.这类资源如果放在内存中,一方面给硬件资源本身就很紧缺的手机造成了负担,另一方面通常也没有这方面的需求,放在内存中,在调用时播放速度较快,而长时音乐文件通 ...

  9. 基于JUnit和Ant测试程序正在运行使用Kieker(AspectJ)监测方法

    这篇日志的目的从标题里能够看出来.这也是我们实验须要,必须总结一下,方便其它师弟师妹在这个基础上做实验. 我已经介绍了非常多基于Kieker的监控方法,这里以Prefuse这个开源可视化Java框架为 ...

  10. CCD 与 CMOS

    窗帘快门与全局快门: 窗帘快门,每次只允许一条缝的光线摄入,因此会呈现自上而下的扫描式拍摄,也就意味着画面上的不同高度,其实拍摄的时间是不同的,也就进一步造成了在高速移动的火车上,如果拍摄窗外的景物, ...