在编程中,我们常常利用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;
}