Apache poi Excel:如何根据列的整数索引创建公式

6

如果我的列号是26,当我创建一个公式时,我的公式应该像这样:例如SUM(AA1:AA3)。但是如何将26转换成AA?27转换成AB呢?Apache POI是否有一种方法可以使用列索引作为整数并将其转换为字母表示形式?


https://dev59.com/ZnE95IYBdhLWcg3wXsyR - Hirak
@Hirak,那不是问题所在。问题在于使用列号作为参数,而不是使用列字母。1对应B,2对应C,以此类推。问题在于当我们开始出现双字母时。 - Stupid.Fat.Cat
3个回答

9
你需要使用Apache POI中的CellReference。它提供了你需要转换的方法。
对于你的特定情况,你需要使用convertNumToColString(int)

接受一个以0为基数的十进制列,并返回一个ALPHA-26表示。


1
这其实很有道理,Apache POI内置了它。 - Stupid.Fat.Cat

7
这只需要一点代码:
public static String columnName(int index) {
    StringBuilder s = new StringBuilder();
    while (index >= 26) {
        s.insert(0, (char) ('A' + index % 26));
        index = index / 26 - 1;
    }
    s.insert(0, (char) ('A' + index));
    return s.toString();
}

以下是一个测试示例:

public static void main(String[] args) {
    System.out.println(columnName(25));
    System.out.println(columnName(26));
    System.out.println(columnName(52));
    System.out.println(columnName(27 * 26));
}

输出:

Z
AA
BA
AAA

1

Erwin Bolwidt有正确的想法。

用英语表达是:

num / 26 - 1 = first_letter
num % 26     = second_letter

例如,

那么举个例子:

27 / 26 - 1 = 0 => A
27 % 26     = 1 => B

Thus:

27 = AB

1
Excel 2007及更高版本中列数的限制为16,384,即列名为XFD [索引为16,383]。因此,您需要3个字母。也许更新的版本允许更多;我的函数可以处理最大值为Integer.MAX_VALUE - 那将是FXSHRXX列 :-) - Erwin Bolwidt
哦,我懂了。谢谢你的建议。 :) - Excuse.my.stupidity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接