然之对PHPExcel开源插件进行了自己的二次封装,使其适应然之系统中常用的导出功能,文件位置:lib\excel\excel.class.php。其依赖于原生的PHPExcel插件(lib\phpexcel 文件夹)。
但lib\excel\excel.class.php类中的setExcelField()不支持大于26列(传参$count大于25)的情况。此函数的作用时求$count+1列的列名。
原有函数如下图(lib\excel\excel.class.php 第366行),可以看到,如果大于26列,得到的结果就会从小写a继续往下读取ASCII码值。但是excel中实际情况确实AA,AB……这样表示。
修复函数如下:(替换原有函数)
public function setExcelField($count)
{
$_count = $count + 1;
$more = "";
if (($_count / 26) > 1){
$more = $this->setExcelField(floor($_count / 26) - 1);
$count = ($_count % 26) - 1;
}
$letter = 'A';
for($i = 1; $i <= $count; $i++) $letter++;
return $more . $letter;
}
截图如下:
代码基于然之开源版4.4
你遇到的问题可能是其他原因导致的。专业版2.3发布时对开源版中的excel.class.php做了修复。至少下面这段代码,在php5.5.9和7.0.4的环境下,运行结果都是AA,而不是a。
<?php
$count = 26;
$letter = 'A';
for($i = 0; $i < $count; $i++) $letter++;
echo $letter . "\n";
条件限制,没有测试更多的php版本,但php5+应该不会有出入。
有具体的问题页面吗?我们使用的过程中超过26列可以正常导出。