您的位置:首页 > 其它

将Excel的列数以字母表示的字符串转换成数字表示

2017-03-25 13:02 411 查看
我们知道,在 Excel 中,行数用数字表示,而列数是用字母表示的(如下图所示),有时候需要把它转换成数字来使用,或者把数字转换成字母。(例如使用POI操作Excel)



下面是转换工具类,用来进行字母和数字之间的转换:

/**
* Excel列数转换工具类
*/
public class ExcelColumnConvertUtil {

/**
* 将以字母表示的Excel列数转换成数字表示
*
* @param letterStr
*            字母字符串,以字母表示的列数,不能为空且只允许包含字母字符
* @return 转换的数字
*
* @throws RuntimeException
*             当letterStr字母字符串为空或包含非法字符时抛出
*/
public static int convertLetterToNumber(String letterStr) {
// 检查字符串是否为空
if (letterStr == null || letterStr.isEmpty()) {
throw new RuntimeException("无法转换,字符串为空!"); // 抛出异常
}

String upperLetter = letterStr.toUpperCase(); // 统一转为大写字符串
if (!upperLetter.matches("[A-Z]+")) { // 检查是否符合,不能包含非字母字符
// 抛出异常
throw new RuntimeException("无法转换,字符串中包含非法字符,请检查字符串:" + letterStr);
}

int num = 0; // 结果数值
// 从字符串尾部开始向头部转换
for (int base = 1, i = upperLetter.length() - 1; i >= 0; i--) {
char ch = upperLetter.charAt(i);
num += (ch - 'A' + 1) * base;
base *= 26;
}

return num;
}

/**
* 将数字转换成以字母表示的Excel列数
*
* @param num
*            表示列数的数字,大于0
* @return 转换的字母字符串
*
* @throws RuntimeException
*             当num小于或等于0时抛出
*/
public static String convertNumberToLetter(int num) {
if (num <= 0) { // 检测列数是否正确
// 抛出异常
throw new RuntimeException("无法转换,Excel列数不正确,请检查列数:" + num);
}

String letterStr = "";
do {
--num;
int mod = num % 26; // 取余
letterStr = (char) (mod + 'A') + letterStr; // 组装字符串
num = (num - mod) / 26; // 计算剩下值
} while (num > 0);

return letterStr;
}
}


测试类:

/**
* 测试类
*/
public class Demo{

public static void main(String[] args) {
// System.out.println(ExcelColumnConvertUtil.convertLetterToNumber(""));
System.out.println(ExcelColumnConvertUtil.convertLetterToNumber("A"));
System.out.println(ExcelColumnConvertUtil.convertLetterToNumber("b"));
System.out.println(ExcelColumnConvertUtil.convertLetterToNumber("Z"));
System.out.println(ExcelColumnConvertUtil.convertLetterToNumber("aB"));
System.out.println(ExcelColumnConvertUtil.convertLetterToNumber("ABC"));

// System.out.println(ExcelColumnConvertUtil.convertNumberToLetter(0));
System.out.println(ExcelColumnConvertUtil.convertNumberToLetter(1));
System.out.println(ExcelColumnConvertUtil.convertNumberToLetter(2));
System.out.println(ExcelColumnConvertUtil.convertNumberToLetter(26));
System.out.println(ExcelColumnConvertUtil.convertNumberToLetter(28));
System.out.println(ExcelColumnConvertUtil.convertNumberToLetter(731));
}

}


测试输出的结果:

1
2
26
28
731
A
B
Z
AB
ABC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: