2014-04-11 2 views
4

수식을 만들 때 내 열 번호가 26이라고 말하면 내 수식이 다음과 같이 나타납니다. 예 : SUM (AA1 : AA3). 26 번을 AA로 어떻게 변환합니까? 아니면 27에서 AB라고 말합니까? Apache POI가 Column 인덱스를 정수로 사용하여 문자 표현으로 변환 할 수있는 방법이 있습니까? 조금 코드가 필요Apache poi Excel : 열의 정수 인덱스를 기반으로 수식 만들기

+0

http://stackoverflow.com/questions/2339238/how-to-set-formulas-in-cell-using-apache-poi – Hirak

+0

@Hirak 그게 문제가되지 않습니다. 문제는 열 문자를 사용하는 대신 매개 변수로 열 번호를 사용하는 것입니다. 1은 B와 연관되고, 2는 C와 연관됩니다. 문제는 우리가 이중 문자를 얻는 것입니다. –

답변

5

:

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

어윈 Bolwidt이 올바른 생각을 가지고있다.

는 영어로는 다음과 같습니다 그래서 예를 들면

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

: 따라서

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

:

27 = AB 
+1

Excel 2007 및 그 이후 버전의 열 수 제한은 16,384입니다. 즉, 열 이름 XFD [인덱스 16,383]입니다. 그래서 3자를 필요로합니다. 그리고 아마 더 새로운 버전은 더 많은 것을 허용합니다; 내 함수는 Integer.MAX_VALUE까지 처리 할 수 ​​있습니다 - 열 FXSHRXX :-) –

+0

아, 알겠습니다. 조언 해주셔서 감사합니다. :) –

7

당신은 아파치 POI에서 CellReference를 사용하는 것이 좋습니다. 즉, 당신이 당신의 특정한 경우를 들어

을 변환하는 데 필요한 방법을 제공합니다, 당신은 convertNumToColString(int))을 원하는 :

는 0 기반의베이스 (10) 열에서 취득 해 ALPHA-26 표현을 반환합니다.

+1

이것은 실제로 아파치 POI가 내장되어 있다는 것을 이해합니다. –