我使用Java jxl api v2.6.16生成Excel Spread Sheet。就像上面的标题所说的那样,如果我所拥有的只是单元格的列和行,如何获取我正在写入的Cell或更具体可写单元格的地址?或者我是否必须编写可以生成该算法的算法?
提前致谢。
答案 0 :(得分:1)
您可以使用此代码。希望这有帮助。您可以这样使用它:
如果单元格定义为cellAddress(cell.getRow() + 1, cell.getColumn())
,则 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);
}
}
答案 1 :(得分:0)
地址由列和行组成。
在 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
从Reference获取地址,检索 Cells 或 Range 对象的 Address 属性,如下所示:
sAddress=cells(1,1).address
将返回 A $ 1 $
和JXL,String rangeAddress = range.getAddress();
答案 2 :(得分:0)
您可以使用以下方法之一通过它的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();
}
}