首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JXL获取单元地址

JXL获取单元地址
EN

Stack Overflow用户
提问于 2013-04-09 13:52:49
回答 3查看 3.2K关注 0票数 1

我正在使用JavaExcelAPIv2.6.16来生成jxl电子表格。就像上面的标题所说的,如果我只有单元的列和行,如何获取单元的地址,或者更具体地说,如何获取我正在写入的可写单元的地址?或者我必须写一个算法来生成它吗?

提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-10-26 03:54:06

您可以使用此代码。希望这能有所帮助。您可以这样使用它:

如果像Cell cell = someCell;一样定义单元格,则为cellAddress(cell.getRow() + 1, cell.getColumn())

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-05-09 19:46:11

地址由列和行组成。

A1表示法中,它写成:Range("A1"),其中列1用字母"A“表示,行是1

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

它们的用法如下:

代码语言:javascript
复制
Cells(1,1).font.bold=true ' row 1, column 1
range("A1").font.bold=true

若要从引用中获取地址,请检索单元格Range对象的address属性,如下所示:

代码语言:javascript
复制
sAddress=cells(1,1).address

这将返回A$1$

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

票数 0
EN

Stack Overflow用户

发布于 2016-01-06 06:35:31

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

简单方法

代码语言:javascript
复制
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();
    }
}

高级方法

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15894272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档