package org.dayatang.excel; import org.apache.commons.lang3.StringUtils; import org.dayatang.utils.Assert; import java.util.Date; /** * Excel工具类 * @author yyang (<a href="mailto:gdyangyu@gmail.com">gdyangyu@gmail.com</a>) * */ public class ExcelUtils { private ExcelUtils() { } /** * 将列名转换为列索引,例如将列"A"转换为0 * @param columnName 要转换的列名 * @return 参数columnName代表的列的索引 */ public static int convertColumnNameToIndex(String columnName) { Assert.notBlank(columnName); String theColumn = columnName.toUpperCase(); int length = theColumn.length(); int result = letterToInt(theColumn.charAt(length - 1)); if (length == 1) { return result; } for (int i = 1; i < length; i++) { int letter = theColumn.charAt(length - i - 1); result = (letterToInt(letter) + 1) * ((int) Math.pow(26, i)) + result; } return result; } private static int letterToInt(int letter) { return letter - 65; } public static Double getDouble(Object data) { if (data == null) { return null; } if (! (data instanceof Double)) { throw new IllegalStateException("数据类型错误:单元格中的数据不是数值类型"); } return (Double) data; } public static Integer getInt(Object data) { Double value = getDouble(data); return value == null ? null : value.intValue(); } public static Long getLong(Object data) { Double value = getDouble(data); return value == null ? null : value.longValue(); } public static Boolean getBoolean(Object data) { if (data == null) { return null; } if (! (data instanceof Boolean)) { throw new IllegalStateException("数据类型错误:单元格中的数据不是布尔类型"); } return (Boolean) data; } public static String getString(Object data) { if (data == null) { return null; } if (StringUtils.isBlank(data.toString())) { return null; } return data.toString(); } public static Date getDate(Object data, Version version, boolean isDate1904) { Double value = getDouble(data); return version.getDate(value, isDate1904); } }