Files
HRMS/hrmsEjb/jxl/biff/CellReferenceHelper.java
2025-07-28 13:56:49 +05:30

138 lines
3.9 KiB
Java

package jxl.biff;
import common.Logger;
import jxl.biff.formula.ExternalSheet;
public final class CellReferenceHelper {
private static Logger logger = Logger.getLogger(CellReferenceHelper.class);
private static final char fixedInd = '$';
private static final char sheetInd = '!';
public static void getCellReference(int column, int row, StringBuffer buf) {
getColumnReference(column, buf);
buf.append(Integer.toString(row + 1));
}
public static void getCellReference(int column, boolean colabs, int row, boolean rowabs, StringBuffer buf) {
if (colabs)
buf.append('$');
getColumnReference(column, buf);
if (rowabs)
buf.append('$');
buf.append(Integer.toString(row + 1));
}
public static String getColumnReference(int column) {
StringBuffer buf = new StringBuffer();
getColumnReference(column, buf);
return buf.toString();
}
public static void getColumnReference(int column, StringBuffer buf) {
int v = column / 26;
int r = column % 26;
StringBuffer tmp = new StringBuffer();
while (v != 0) {
char c = (char)(65 + r);
tmp.append(c);
r = v % 26 - 1;
v /= 26;
}
char col = (char)(65 + r);
tmp.append(col);
for (int i = tmp.length() - 1; i >= 0; i--)
buf.append(tmp.charAt(i));
}
public static void getCellReference(int sheet, int column, int row, ExternalSheet workbook, StringBuffer buf) {
buf.append('\'');
String name = workbook.getExternalSheetName(sheet);
buf.append(StringHelper.replace(name, "'", "''"));
buf.append(name);
buf.append('\'');
buf.append('!');
getCellReference(column, row, buf);
}
public static void getCellReference(int sheet, int column, boolean colabs, int row, boolean rowabs, ExternalSheet workbook, StringBuffer buf) {
buf.append('\'');
String name = workbook.getExternalSheetName(sheet);
buf.append(StringHelper.replace(name, "'", "''"));
buf.append(name);
buf.append('\'');
buf.append('!');
getCellReference(column, colabs, row, rowabs, buf);
}
public static String getCellReference(int sheet, int column, int row, ExternalSheet workbook) {
StringBuffer sb = new StringBuffer();
getCellReference(sheet, column, row, workbook, sb);
return sb.toString();
}
public static String getCellReference(int column, int row) {
StringBuffer buf = new StringBuffer();
getCellReference(column, row, buf);
return buf.toString();
}
public static int getColumn(String s) {
int colnum = 0;
int numindex = getNumberIndex(s);
String s2 = s.toUpperCase();
int startPos = s.lastIndexOf('!') + 1;
if (s.charAt(startPos) == '$')
startPos++;
int endPos = numindex;
if (s.charAt(numindex - 1) == '$')
endPos--;
for (int i = startPos; i < endPos; i++) {
if (i != startPos)
colnum = (colnum + 1) * 26;
colnum += s2.charAt(i) - 65;
}
return colnum;
}
public static int getRow(String s) {
try {
return Integer.parseInt(s.substring(getNumberIndex(s))) - 1;
} catch (NumberFormatException e) {
logger.warn(e, e);
return 65535;
}
}
private static int getNumberIndex(String s) {
boolean numberFound = false;
int pos = s.lastIndexOf('!') + 1;
char c = Character.MIN_VALUE;
while (!numberFound && pos < s.length()) {
c = s.charAt(pos);
if (c >= '0' && c <= '9') {
numberFound = true;
continue;
}
pos++;
}
return pos;
}
public static boolean isColumnRelative(String s) {
return (s.charAt(0) != '$');
}
public static boolean isRowRelative(String s) {
return (s.charAt(getNumberIndex(s) - 1) != '$');
}
public static String getSheet(String ref) {
int sheetPos = ref.lastIndexOf('!');
if (sheetPos == -1)
return "";
return ref.substring(0, sheetPos);
}
}