JXL获取单元地址

我正在使用Java jxl api v2.6.16来生成Excel Spread Sheet。 就像上面的标题所说的那样,如果我所拥有的是单元格的列和行,那么如何获取我正在写入的单元格或更具体的可写单元格的地址? 或者我必须写一个algorithm,可以生成?

提前致谢。

你可以使用这个代码。 希望这个帮助。 你可以这样使用它:

cellAddress(cell.getRow() + 1, cell.getColumn())如果cell被定义为Cell cell = someCell;

 private String cellAddress(Integer rowNumber, Integer colNumber){ return "$"+columnName(colNumber)+"$"+rowNumber; } private String columName(Integer colNumber) { Base columns = new Base(colNumber,26); columns.transform(); return columns.getResult(); } class Base { String[] colNames = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(","); String equalTo; int position; int number; int base; int[] digits; int[] auxiliar; public Base(int n, int b) { position = 0; equalTo = ""; base = b; number = n; digits = new int[1]; } public void transform() { if (number < base) { digits[position] = number; size(); } else { digits[position] = number % base; size(); position++; number = number / base; transform(); } } public String getResult() { for (int j = digits.length - 2; j >= 0; j--) { equalTo += colNames[j>0?digits[j]-1:digits[j]]; } return equalTo; } private void size() { auxiliar = digits; digits = new int[auxiliar.length + 1]; System.arraycopy(auxiliar, 0, digits, 0, auxiliar.length); } } 

地址由列和行组成。

A1符号中,它被写为: Range("A1") ,其中列1由字母“A”表示,行是1

R1C1表示法中,它会这样写: R1C1 ,其中列是1,行是1

他们会像这样使用:

 Cells(1,1).font.bold=true ' row 1, column 1 range("A1").font.bold=true 

从引用获取地址 ,获取单元格范围对象的地址属性,如下所示:

 sAddress=cells(1,1).address 

这将返回$ 1 $

在JXL中, String rangeAddress = range.getAddress();

您可以通过使用下面的方法之一来获取列的alpha索引。 他简单的方法只是把一个整数转换成一个ASCII字符。 第二种方法允许使用自定义字母表。

简单的方法

 public class LookupUtil { public static String cellAddress(int row, int col) { return String.format("$%s$%d", columnName(col), row); } public static String columnName(int index) { int div = index + 1; StringBuffer result = new StringBuffer(); int mod = 0; while (div > 0) { mod = (div - 1) % 26; result.insert(0, (char) (65 + mod)); div = (int) ((div - mod) / 26); } return result.toString(); } } 

高级方法

 public class LookupUtil { private static final char[] ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); public static String cellAddress(int row, int col) { return String.format("$%s$%d", columnName(col, ALPHA), row); } public static String columnName(int index, char[] alphabet) { int div = index + 1; StringBuffer result = new StringBuffer(); int mod = 0; while (div > 0) { mod = (div - 1) % alphabet.length; result.insert(0, alphabet[mod]); div = (int) ((div - mod) / alphabet.length); } return result.toString(); } }