Excel列名 字母和数字的转换

Excel的列名是由于字母组成的。 A-Z 分别代表1-26  AA 是27 AB是28 以此类推。

以下是这种编码的转换方法,如果遇到需要用纯字母编号来表示数字的时候可以用到。

/**
 * 类似EXCEL的列头编号的转换方法
 */
public class AlphaIntegerTest {

  /**
   * 将数值转换成A-Z的字母表示
   * 
   * @param value 数值
   * @return 字母表示
   */
  public static String toAlphaString(int value) {
    if (value <= 0) {
      throw new IllegalArgumentException();
    }
    StringBuilder result = new StringBuilder();
    do {
      value--;
      int n = value % 26;
      result.append(((char) (n + (int) 'a')));
      value = (int) ((value - n) / 26);
    } while (value > 0);
    return result.reverse().toString();
  }

  /**
   * 将编号转换成数值
   * 
   * @param value 编号
   * @return 编号代表的数值
   */
  public static int parseIntByCode(String value) {
    if (value == null || !value.matches("[a-zA-Z]+")) {
      throw new IllegalArgumentException();
    }
    char[] chars = value.toLowerCase().toCharArray();
    int index = 0;
    for (int i = 0; i < chars.length; i++) {
      index += ((int) chars[i] - (int) 'a' + 1) * (int) Math.pow(26, chars.length - i - 1);
    }
    return index;
  }


  // 测试
  public static void main(String[] args) {
    System.out.println(toAlphaString(1));
    System.out.println(toAlphaString(1 + 26));
    System.out.println(toAlphaString(1 + 26 + 26 * 26));
    System.out.println(toAlphaString(1 + 26 + 26 * 26 + 26 * 26 * 26));
    System.out.println(parseIntByCode("a"));
    System.out.println(parseIntByCode("aa"));
    System.out.println(parseIntByCode("aaa"));
    System.out.println(parseIntByCode("aaaa"));
  }

}

 

posted @ 2015-08-13 21:36  relucent  阅读(2139)  评论(0编辑  收藏  举报