将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
相关文章推荐
- 数字字符串转换为字母组合的种数
- Excel列名 字母和数字的转换
- excel列字母数字表示互转
- Excel列字母与数字的转换
- Excel行列数字字母转换实现
- 将阿拉伯数字表示的金额转换为大写金额字符串
- 使用POI读取Excel时如何把数字转换成字符串
- [leetcode] Excel Sheet Column Title (excel表格的数字转字母表示格式) C语言实现
- Excel列名 字母和数字的转换
- 字母和数字的转换——Excel列名
- 解析Excel时列号数字转换为字母
- Excel列字母和数字的转换
- 26进制,字母表示数字,以递归算法升序输出字符串
- 将一个数字字符串转换为数字(支持数字中间夹杂字母,但是受int型的限制,转化的长度很有限),如:"1234" -->1234
- 动态规划——数字字符串转换为字母组合的种数(decode-ways)
- Excel列数和列字母的转换(column number 和 column letters 互转)
- 将数字转换成Excel表头格式的字母序号
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应
- 转载: 黄聪:C#中 Excel列字母与数字的转换
- 数字字符串转换为字母组合的种数