|
|
|
package com.alibaba.excel.util;
|
|
|
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @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 static final char REDUNDANT_CHARACTERS = '$';
|
|
|
|
|
|
|
|
private PositionUtils() {}
|
|
|
|
|
|
|
|
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) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
int firstNumber = currentCellIndex.length() - 1;
|
|
|
|
for (; firstNumber >= 0; firstNumber--) {
|
|
|
|
char c = currentCellIndex.charAt(firstNumber);
|
|
|
|
if (c < '0' || c > '9') {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return Integer.parseUnsignedInt(currentCellIndex.substring(firstNumber + 1)) - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getCol(String currentCellIndex, Integer before) {
|
|
|
|
if (currentCellIndex == null) {
|
|
|
|
if (before == null) {
|
|
|
|
before = -1;
|
|
|
|
}
|
|
|
|
return before + 1;
|
|
|
|
}
|
|
|
|
int firstNumber = currentCellIndex.charAt(0) == REDUNDANT_CHARACTERS ? 1 : 0;
|
|
|
|
int col = 0;
|
|
|
|
for (; firstNumber < currentCellIndex.length(); firstNumber++) {
|
|
|
|
char c = currentCellIndex.charAt(firstNumber);
|
|
|
|
boolean isNotLetter = c == REDUNDANT_CHARACTERS || (c >= '0' && c <= '9');
|
|
|
|
if (isNotLetter) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
col = col * 26 + Character.toUpperCase(c) - 'A' + 1;
|
|
|
|
}
|
|
|
|
return col - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|