java poi列号转字母_通过Excel列号取得其对应的列字母

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

}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值