谷歌表格API V4 Java,如何通过列号获取列字母

3

你好:使用Java的Google Spreadsheet API V4,我想要根据列数获取列字母。例如:第2列的列字母是B

是否已经在Google Spreadsheet API中提供了这样的功能OR是否有其他简单方式来实现这一点OR我需要编写自己的转换代码?


您还可以参考此相关SO帖子。根据文档,您可以使用FindReplaceRequest().getFind();查找值。此外,您还可以使用match(),它可以在数组中查找字符串,如此线程所建议的。 - abielita
感谢@abielita。已经审查了提供的信息。然而,无法解决问题,即如何根据列号获取列字母。 - Bipo K
2个回答

5

问题仍然是:在Google Spreadsheet API V4中是否有一种本地方法可以根据列号获取列字母?

但是,为了以后参考,如果有人需要实现自己的转换,我提供下面的比较表。

情况1:根据列号获取列字母

public void ColumnNumberToLetter() {
    int inputColumnNumber = 49;
    String outputColumnName = "";
    int Base = 26;        
    String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";        

    int TempNumber = inputColumnNumber;
    while (TempNumber > 0) {
       int position = TempNumber % Base;
       outputColumnName = (position == 0 ? 'Z' : chars.charAt(position > 0 ? position - 1 : 0)) + outputColumnName;
       TempNumber = (TempNumber - 1) / Base;
    }
    System.out.println("ColumnNumberToLetter :" + inputColumnNumber + " = " +  outputColumnName);
}

案例2:根据列字母获取列号

public void ColumnLetterToNumber() {
    String inputColumnName = "AW";
    int outputColumnNumber = 0;

    if (inputColumnName == null || inputColumnName.length() == 0) {
        throw new IllegalArgumentException("Input is not valid!");
    }

    int i = inputColumnName.length() - 1;
    int t = 0;
    while (i >= 0) {
        char curr = inputColumnName.charAt(i);
        outputColumnNumber = outputColumnNumber + (int) Math.pow(26, t) * (curr - 'A' + 1);
        t++;
        i--;
    }
    System.out.println("ColumnLetterToNumber : " + inputColumnName + " = " +  outputColumnNumber);
}

1
这正是我一直在寻找的,而且它似乎在较小的列数(BG实际上)上运行良好,但当我尝试更大的列数时,它就无法工作了。我认为你在计算中忽略了某些东西,而且我认为问题出在pow()函数上。但我现在无法确定具体问题所在,我会再看看并回复你。 - Skaros Ilias
1
搞定了。你需要在计算中添加 +(int) Math.pow(26, t)。问题在于你没有正确计算字母。对于一个字母,你做得很好,AA-AZ 也可以正常工作,但当它到达 B_ 区域时,你会失去 26 列。AB_ 同样如此。使用三个字母列进行测试,效果很好。干得好! - Skaros Ilias

2

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