public static List<List<Object>> analysisExcelData(String fileName) throws Exception {
List<List<Object>> list;
try (FileInputStream inputStream = new FileInputStream(fileName)) {
//获取Excel工作薄
Workbook work = getWorkbook(inputStream, fileName);
if (null == work) {
throw new Exception("解析异常");
}
// EXCEL中sheet的起始位置
int sheetNumber = 0;
Sheet sheet = null; //页数
Row row = null; //行数
Cell cell = null; //列数
// 解析出来的数据集合
list = new ArrayList<>();
// 遍历Excel中所有的sheet
for (int i = sheetNumber; i < work.getNumberOfSheets(); i++) {
sheet = work.getSheetAt(i);
if (sheet == null) {
continue;
}
// 遍历当前sheet中的所有行
for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
row = sheet.getRow(j);
if (row == null) {
continue;
}
// 遍历所有的列
List<Object> li = new ArrayList<>();
// 按表头的列个数循环,如果按当前行循环,如果数据第一行首尾列值为空,会出现少列的情况
for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
cell = row.getCell(y);
String value = getValue(cell);
// 去掉特殊字符 165476165488057124550',''165858273842768979545',''166363624138241304159
String replaced =
value.replaceAll("'", "").replaceAll("''", "");
li.add(replaced);
}
list.add(li);
}
}
}
return list;
}
/**
* 根据文件后缀,自适应上传文件的版本
*
* @param inStr
* @param fileName
* @return
* @throws Exception
*/
public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
Workbook wb = null;
// 获取文件的后缀
String fileType = fileName.substring(fileName.lastIndexOf("."));
// 文件类型判断
if (ReminderConstant.EXCEL_2003.equals(fileType)) {
wb = new HSSFWorkbook(inStr); //2003-
} else if (ReminderConstant.EXCEL_2007.equals(fileType)) {
wb = new XSSFWorkbook(inStr); //2007+
}
return wb;
}
/**
* 对表格中数值进行格式化
*
* @param cell
* @return
*/
public static String getValue(Cell cell) {
String value = "";
if (null == cell) {
return value;
}
switch (cell.getCellType()) {
//数值型
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
//如果是date类型则 ,获取该cell的date值
Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
value = format.format(date);
} else {// 纯数字
BigDecimal big = new BigDecimal(cell.getNumericCellValue());
value = big.toString();
//解决1234.0 去掉后面的.0
if (null != value && !"".equals(value.trim())) {
String[] item = value.split("[.]");
if (1 < item.length && ZERO.equals(item[1])) {
value = item[0];
}
}
}
break;
//字符串类型
case STRING:
value = cell.getStringCellValue();
break;
// 公式类型
case FORMULA:
//读公式计算值
value = String.valueOf(cell.getNumericCellValue());
if (value.equals(NAN)) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue();
}
break;
// 布尔类型
case BOOLEAN:
value = " " + cell.getBooleanCellValue();
break;
default:
value = cell.getStringCellValue();
}
if (NULL.endsWith(value.trim())) {
value = "";
}
return value;
}
``
java解析EXCEL
最新推荐文章于 2024-07-16 15:48:46 发布