杨桢 |
然之对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) 截图如下:
代码基于然之开源版4.4 |
然之-Bee
|
谢谢反馈,我们记录下。
|
刘刚 |
有具体的问题页面吗?我们使用的过程中超过26列可以正常导出。
|
杨桢 |
我用的是开源版本4.4,开源版全部只有csv格式,是不涉及上述文件的。但是我在二次开发的过程中用到过这个函数,会出现我描述的问题。我只能是把代码分析一下。至少,$letter++这种方式时不对的,php会自动把字符按照ascii码进行++运算,ascii码Z之后是a,而不是Z之后是AA。
|
刘刚 |
你遇到的问题可能是其他原因导致的。专业版2.3发布时对开源版中的excel.class.php做了修复。至少下面这段代码,在php5.5.9和7.0.4的环境下,运行结果都是AA,而不是a。
<?php
条件限制,没有测试更多的php版本,但php5+应该不会有出入。 |