2013-04-09 3 views
1

Я использую Java jxl api v2.6.16 для генерации листа Excel. Как и в приведенном выше заголовке, как получить адрес ячейки или более конкретно записываемой ячейки, которую я пишу, если все, что у меня есть, это столбец и строка ячейки? Или мне нужно написать алгоритм, который может сгенерировать это?JXL Get Cell Address

Заранее спасибо.

ответ

0

Адрес состоит из столбца и строки.

В A1 Notation написано как: Range("A1"), где колонка 1 rtepresented буквой «А» и ряд 1

В R1C1 Notation было бы записать так: R1C1, где столбец 1 и строка 1

Они будут использоваться как это:

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

, чтобы получить адрес из задания, получения Адрес свойство клеток или Диапазон объекта, как показано ниже:

sAddress=cells(1,1).address 

, который будет возвращать A $ 1 $

и в JXL, String rangeAddress = range.getAddress();

+0

Спасибо, но это не то, что я хотел. На самом деле я хотел обратить вспять. Например, как я могу получить адрес ячейки «Ячейка (1,1)», например. В любом случае я не нашел решение, мне пришлось написать алгоритм для поиска адреса. –

+0

так что вы хотели 'cells (1,1) .address'? Это возвращает ** $ A $ 1 ** –

+0

@DaveAgaba Я изменил свой ответ, чтобы дать вам то, что вы хотели. –

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); 
    } 
} 
+0

метод для получения cellAddress еще не реализован в jxl – jechaviz

0

Вы можете получить столбец, это альфа-индекс, используя один из указанных ниже способов. простой метод просто отличает целое число с символом 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(); 
    } 
}