在编程中,我们常常利用POI或者其他接口操作Excel文件。当通过列号写公式时,很麻烦。因为Excel公式中,使用列字母形式表示单元格。比如:SUM(B1:B5),下面的方法可以通过Excel列号取得其对应的列字母。这样通过循环列号,得到对应的列字母就可以方便的进行操作不同列了。下面是实现代码。
Java实现
/** * 获取一列对应的字母。例如:ColumnNum=1,则返回值为A 列号转字母 */ private String getColumnName(int columnNum) { int first; int last; String result = ""; if (columnNum > 256) columnNum = 256; first = columnNum / 27; last = columnNum - (first * 26); if (first > 0) result = String.valueOf((char) (first + 64)); if (last > 0) result = result + String.valueOf((char) (last + 64)); return result; }
VBA实现
'获取一列对应的字母 '例如:ColumnNum=1,则返回值为A '列号转字母 Function getColumnName(ByVal ColumnNum As Integer) As String Dim First As Integer, Last As Integer Dim Result As String If ColumnNum > 256 Then ColumnNum = 256 First = Int(ColumnNum / 27) Last = ColumnNum - (First * 26) If First > 0 Then Result = Chr(First + 64) End If If Last > 0 Then Result = Result & Chr(Last + 64) End If GetColumnName = Result End Function
2013/08/20 更新 以上方法只适用于Excel2003,以下方法可以兼容Excel2003,2007,2010,并且增加了将Excel表格中列号字母转成列索引方法
Java实现
/** * 用于将Excel表格中列号字母转成列索引,从1对应A开始 * * @param column * 列号 * @return 列索引 */ private static int columnToIndex(String column) { if (!column.matches("[A-Z]+")) { try { throw new Exception("Invalid parameter"); } catch (Exception e) { e.printStackTrace(); } } int index = 0; char[] chars = column.toUpperCase().toCharArray(); for (int i = 0; i < chars.length; i++) { index += ((int) chars[i] - (int) 'A' + 1) * (int) Math.pow(26, chars.length - i - 1); } return index; } /** * 用于将excel表格中列索引转成列号字母,从A对应1开始 * * @param index * 列索引 * @return 列号 */ private static String indexToColumn(int index) { if (index <= 0) { try { throw new Exception("Invalid parameter"); } catch (Exception e) { e.printStackTrace(); } } index--; String column = ""; do { if (column.length() > 0) { index--; } column = ((char) (index % 26 + (int) 'A')) + column; index = (int) ((index - index % 26) / 26); } while (index > 0); return column; }
都是鸡肠 啊