Excel 열수와 대응하는 자모의 전환

최근에 이런 문제가 발생하여 데이터를 Excel 문서에 쓰고, 공식을 삽입할 때 어떤 열에 대응하는 알파벳을 원한다. 예를 들어 첫 번째 열에 대응하는 "A", 52열에 대응하는 "AZ"
지금 코드를 붙여서 뒤에 대기하세요
 
public String getExcelColumnLetter(int column){
    String columnLetter = "";
    while(column > 26){
        int remainder = column % 26;
        if(0 == remainder){
            columnLetter = (char)(64+26) + columnLetter;
            column=(column-26)/26;
        }else{
            columnLetter = (char)(64+remainder) + columnLetter;
            column=(column-remainder)/26;
        }
    }
    columnLetter = (char)(64+column) + columnLetter;
    return columnLetter;
}

이 코드의 열수는 1부터 시작된다.
 
또 인터넷에서 같은 기능의 코드를 보았는데, 좀 더 간결했다
 
public static String getExcelLabel(int index) {
    String rs = "";
    do {
        index--;
        rs = ((char) (index % 26 + (int) 'A')) + rs;
        index = (int) ((index - index % 26) / 26);
    } while (index > 0);
    System.out.println(rs);
    return rs;
}

위의 두 단락의 코드는 전송된 매개 변수에 대해 판단을 하지 않았으니, 만약 전송된 음수가 슬프게 된다면 각종 문자가 되돌아오기를 기다려라.필요할 때 함수 시작 부분에 판단 문장을 추가할 수 있다.
 
 
이 코드를 완성한 후에 또 아무 일도 없이 자모에서 열수까지의 함수를 썼으니 붙여라
 
public int getExcelColumnIndex(String columnLetter){
    if(columnLetter == null || !columnLetter.matches("[a-zA-Z]+")){
        return -1;
    }
    columnLetter = columnLetter.toUpperCase();
    int columnIndex = 0;
    char[] letters = columnLetter.toCharArray();
    for(char let : letters){
        columnIndex = (int)let - 64 + columnIndex*26;
    }
    return columnIndex;
}

이 코드는 전송된 문자열에 대해 대소문자의 제한이 없지만, 반드시 모두 알파벳으로 구성되어야 하며, 그렇지 않으면 -1로 되돌아와야 한다.문자열이 비합법적임을 나타냅니다.
 
마지막으로 검증 방법을 제공하다
Excel에서 A1 셀에 AB를 입력한 다음 B1 셀에 공식을 입력합니다: COLUMN(INDIRECT(A1&3)
이렇게 하면 B1칸에서 AB열에 대응하는 열 수 28을 얻을 수 있으며, excel2007에서 최대는 XFD만 입력할 수 있는 것 같다.
 
거꾸로 A2 셀에 28과 같은 열을 입력할 수 있고, B2 셀에 = LEFT(1, A2, 4, 1), LEN(1, A2, 4, 1)-1)
B2칸에서 28열에 대응하는 알파벳 AB를 얻을 수 있다.XFD에 해당하는 열 수는 16384이므로 16384보다 크지 않습니다.

좋은 웹페이지 즐겨찾기