1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.office.spreadsheet.formula;
22
23 import org.millscript.office.spreadsheet.CellRef;
24
25 /**
26 *
27 */
28 public abstract class CellAddress {
29
30 private int columnIndex;
31
32 private boolean columnIndexIsRelative;
33
34 private int rowIndex;
35
36 private boolean rowIndexIsRelative;
37
38 protected CellAddress( final int row, final boolean rowRel, final int col, final boolean colRel ) {
39 this.columnIndex = col;
40 this.columnIndexIsRelative = colRel;
41 this.rowIndex = row;
42 this.rowIndexIsRelative = rowRel;
43 }
44
45 public abstract CellAddress getCellAddress( final int row, final int col );
46
47 public int getColumn() {
48 return this.columnIndex;
49 }
50
51 protected void appendColumnLetters( final StringBuilder builder ) {
52 if ( this.columnIndex > 26 ) {
53 builder.append( (char) ( ( this.columnIndex / 26 ) + 64 ) );
54 }
55 builder.append( (char) ( ( this.columnIndex % 26 ) + 64 ) );
56 }
57
58 public abstract int getColumnRelativeTo( final int startingColumn );
59
60 public int getColumnRelativeTo( final CellRef startingCell ) {
61 return this.getColumnRelativeTo(
62 startingCell.getColumnRef().getColumnIndex()
63 );
64 }
65
66 public int getRow() {
67 return this.rowIndex;
68 }
69
70 public abstract int getRowRelativeTo( final int startingRow );
71
72 public int getRowRelativeTo( final CellRef startingCell ) {
73 return this.getRowRelativeTo(
74 startingCell.getRowRef().getRowIndex()
75 );
76 }
77
78 public boolean isColumnRelative() {
79 return this.columnIndexIsRelative;
80 }
81
82 public boolean isRowRelative() {
83 return this.rowIndexIsRelative;
84 }
85
86 }