Apache POI技术问询:如何处理列数超过26的Excel生成场景
Apache POI 处理超过26列的列名映射问题
我从数据库获取数据生成Excel文件,当列数少于26时,以下代码可以正常运行:
val c = ('A'.toInt + numCols- 1).toChar val ref = s"A1:${c}1" CellRangeAddress.valueOf(ref)
但当列数远大于26时,需要将列映射为A-Z、AA、AB、AC等格式,请问Apache POI中是否有便捷的API可实现该功能?
有的,Apache POI提供了现成的工具方法来处理这种列名转换,不用自己实现进制转换逻辑。
直接使用org.apache.poi.ss.util.CellReference类的静态方法convertNumToColString(int col)即可——这个方法会把从0开始的列索引转换成Excel的列名格式(比如0→A,25→Z,26→AA,27→AB,以此类推)。
结合你的代码修改后,不管列数多少都能正确生成单元格范围:
import org.apache.poi.ss.util.CellReference val lastColIndex = numCols - 1 // 列数转成从0开始的索引 val lastColName = CellReference.convertNumToColString(lastColIndex) val ref = s"A1:${lastColName}1" CellRangeAddress.valueOf(ref)
另外,如果你需要反向转换(列名转索引),也可以用CellReference.convertColStringToIndex(String col)方法,比如"AA"→26。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

