问题说明:在Excel2003中,用A表示第1列,B表示第2列......Z表示第26列,AA表示27列,AB表示第28列......以此类推。写出由excel列号转数字和数字转列号的函数。
private static final char[] excelLetterTable = {'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y',
'Z'};
private static final char FIRST_CHAR_EXCEL_LETTER = 'A';
private static final int EXCEL_RADIX = 26;
public static int excelSequenceToDigit(String sequence) {
if (sequence == null) {
return 0;
}
int result = 0;
for (int i = 0; i < sequence.length(); i++) {
result = EXCEL_RADIX * result +
Character.toUpperCase(sequence.charAt(i)) -
FIRST_CHAR_EXCEL_LETTER + 1;
}
return result;
}
public static String digitToExcelSequence(int number) {
if (number <= 0) {
return null;
}
char[] reslut = new char[32];
int charPos = 32;
int current = number;
int remainder = 0;
while (current != 0) {
remainder = current % EXCEL_RADIX;// 0 ~ radix - 1
if (remainder == 0) {
remainder = EXCEL_RADIX;
current -= 1;
}
reslut[--charPos] = excelLetterTable[remainder - 1];
current /= EXCEL_RADIX;
}
return new String(reslut, charPos, 32 - charPos);
}