【问题标题】:Google Sheet API V4 Java, Get Column Letter from Column NumberGoogle Sheet API V4 Java,从列号获取列字母
【发布时间】:2017-03-29 15:15:14
【问题描述】:

你好:使用Google Spreadsheet API V4 on Java,我想得到column letter,给定column number。示例:列号 2 的列字母为 B

Google 电子表格 API 中是否已经提供了某种方法还有其他简单的方法可以做到这一点我需要编写自己的转换吗? p>

【问题讨论】:

  • 您也可以参考这个相关的SO post。根据documentation,您可以使用FindReplaceRequest().getFind(); 找到值。此外,您可以使用match(),它可以按照thread 中的建议在数组中查找字符串。
  • 谢谢@abielita。审查了提供的信息。但是,无法解决问题,即在给定列号的情况下获取列字母。

标签: java google-sheets-api


【解决方案1】:

虽然问题仍然是: Google 电子表格 API V4 中是否有 native way 来获取给定列号的列字母?

但是,对于future reference,我在下面提供collation,以防有人需要实现自己的转换。

案例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);
}

【讨论】:

  • 这正是我一直在寻找的,它似乎一直在工作,直到我尝试使用更大的列号(实际上是 BG)但它没有工作。我认为你在计算中忽略了一些东西,我认为问题出在 pow() 上。但我现在不能指出它。会查看并回复您
  • 想通了。您需要在计算时添加+(int) Math.pow(26, t)。问题是您没有正确计算字母。你对一个字母来说是正确的,对于 AA-AZ 来说也可以,但是当它到达 B_ 区域时,你会丢失 26 列。 AB_也一样。用 3letter 列对此进行了测试,并且工作正常。干得好
【解决方案2】:

我认为您也可以只使用此处提到的 R1C1 表示法:

https://developers.google.com/sheets/api/guides/concepts

这让您可以使用列号而不是字母。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多