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(); } }