|
|
|
package com.alibaba.excel.util;
|
|
|
|
|
|
|
|
import java.util.Locale;
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.util.CellReference;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author jipengfei
|
|
|
|
*/
|
|
|
|
public class PositionUtils {
|
|
|
|
|
|
|
|
private static final Pattern CELL_REF_PATTERN = Pattern.compile("(\\$?[A-Z]+)?" + "(\\$?[0-9]+)?",
|
|
|
|
Pattern.CASE_INSENSITIVE);
|
|
|
|
private static final char SHEET_NAME_DELIMITER = '!';
|
|
|
|
|
|
|
|
private PositionUtils() {}
|
|
|
|
|
|
|
|
public static int getRowByRowTagt(String rowTagt) {
|
|
|
|
int row = 0;
|
|
|
|
if (rowTagt != null) {
|
|
|
|
row = Integer.parseInt(rowTagt) - 1;
|
|
|
|
}
|
|
|
|
return row;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getRowByRowTagt(String rowTagt, Integer before) {
|
|
|
|
int row;
|
|
|
|
if (rowTagt != null) {
|
|
|
|
row = Integer.parseInt(rowTagt) - 1;
|
|
|
|
return row;
|
|
|
|
} else {
|
|
|
|
if (before == null) {
|
|
|
|
before = -1;
|
|
|
|
}
|
|
|
|
return before + 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getRow(String currentCellIndex) {
|
|
|
|
if (currentCellIndex != null) {
|
|
|
|
int plingPos = currentCellIndex.lastIndexOf(SHEET_NAME_DELIMITER);
|
|
|
|
String cell = currentCellIndex.substring(plingPos + 1).toUpperCase(Locale.ROOT);
|
|
|
|
Matcher matcher = CELL_REF_PATTERN.matcher(cell);
|
|
|
|
if (!matcher.matches()) {
|
|
|
|
throw new IllegalArgumentException("Invalid CellReference: " + currentCellIndex);
|
|
|
|
}
|
|
|
|
String row = matcher.group(2);
|
|
|
|
return Integer.parseInt(row) - 1;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getCol(String currentCellIndex, Integer before) {
|
|
|
|
if (currentCellIndex != null) {
|
|
|
|
int plingPos = currentCellIndex.lastIndexOf(SHEET_NAME_DELIMITER);
|
|
|
|
String cell = currentCellIndex.substring(plingPos + 1).toUpperCase(Locale.ROOT);
|
|
|
|
Matcher matcher = CELL_REF_PATTERN.matcher(cell);
|
|
|
|
if (!matcher.matches()) {
|
|
|
|
throw new IllegalArgumentException("Invalid CellReference: " + currentCellIndex);
|
|
|
|
}
|
|
|
|
String col = matcher.group(1);
|
|
|
|
|
|
|
|
if (col.length() > 0 && col.charAt(0) == '$') {
|
|
|
|
col = col.substring(1);
|
|
|
|
}
|
|
|
|
if (col.length() == 0) {
|
|
|
|
return -1;
|
|
|
|
} else {
|
|
|
|
return CellReference.convertColStringToIndex(col);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (before == null) {
|
|
|
|
before = -1;
|
|
|
|
}
|
|
|
|
return before + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|