package com.engine.jucailinkq.common.util.excel; import org.apache.commons.lang3.Validate; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.multipart.MultipartFile; import java.io.BufferedInputStream; import java.io.InputStream; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; /** * @Author: sy * @Description: * @Date: 2024/6/5 **/ public class ExcelSupport { private static final String pattern = "yyyy-MM-dd HH:mm:ss"; //excel类型 public static final String EXCEL_TYPE_XLSX = "xlsx"; public static final String EXCEL_TYPE_XLS = "xls"; /** * 解析文件,获取单个sheet * * @param file 文件 * @param sheetIndex sheet下标,从0开始 * @return sheet */ public static Sheet parseFile(MultipartFile file, int sheetIndex) { Workbook workBook = null; try (InputStream ins = file.getInputStream();) { String fileName = file.getOriginalFilename(); if (fileName.endsWith(EXCEL_TYPE_XLSX)) { workBook = new XSSFWorkbook(ins); } else if (fileName.endsWith(EXCEL_TYPE_XLS)) { workBook = new HSSFWorkbook(ins); } else { throw new IllegalArgumentException("File format error! Only xlsx and xls types are supported"); } return workBook.getSheetAt(sheetIndex); } catch (Exception e) { throw new IllegalArgumentException(e); } } /** * 解析文件,获取单个sheet * * @param sheetIndex sheet下标,从0开始 * @return sheet */ public static Sheet parseFile(InputStream ins, int sheetIndex,String fileName) { Workbook workBook = null; try { if (fileName.endsWith(EXCEL_TYPE_XLSX)) { workBook = new XSSFWorkbook(new BufferedInputStream(ins)); } else if (fileName.endsWith(EXCEL_TYPE_XLS)) { workBook = new HSSFWorkbook(new BufferedInputStream(ins)); } else { throw new IllegalArgumentException("File format error! Only xlsx and xls types are supported"); } return workBook.getSheetAt(sheetIndex); } catch (Exception e) { throw new IllegalArgumentException(e); } } /** * 获取sheet的头列 * * @param sheet * @param headerIndex 头下标 * @return */ public static List getSheetHeader(Sheet sheet, int headerIndex) { List headers = new ArrayList<>(); Row headerRow = sheet.getRow(headerIndex); Iterator cellIterator = headerRow.cellIterator(); while (cellIterator.hasNext()) { Cell cell = (Cell) cellIterator.next(); java.lang.String stringCellValue = cell.getStringCellValue(); headers.add(stringCellValue); // if (cell.getCellType().equals(CellType.NUMERIC)) { // double numericValue = cell.getNumericCellValue(); // headers.add(String.valueOf(numericValue)); // } else if (cell.getCellType().equals(CellType.STRING)) { // java.lang.String stringCellValue = cell.getStringCellValue(); // headers.add(stringCellValue); // } } return headers; } /** * 返回指定单元格的数据 * * @param sheet 指定sheet * @param rowIndex 第几行,从0开始 * @param cellIndex 第几列,从0开始 * @return 值 */ public static String getCellValue(Sheet sheet, int rowIndex, int cellIndex) { Validate.notNull(sheet.getRow(rowIndex), "Line %s is empty and cannot be resolved", rowIndex); return getCellValue(sheet.getRow(rowIndex).getCell(cellIndex)); } private static final DecimalFormat decimalFormat = new DecimalFormat("####################.###########"); /** * 格式化解析的数据 */ public static String getCellValue(Cell cell) { String cellValue = ""; if (cell != null) { switch (cell.getCellType()) { case NUMERIC: // 数值类型 if (DateUtil.isCellDateFormatted(cell)) { cellValue = getDateStr(cell.getDateCellValue(), pattern); } else { // cell.setCellType(STRING); // cellValue = cell.getStringCellValue(); cellValue = decimalFormat.format(cell.getNumericCellValue()); } break; case STRING: // 字符串类型 cellValue = cell.getStringCellValue(); break; case BOOLEAN: // 布尔类型 cellValue = String.valueOf(cell.getBooleanCellValue()); break; case FORMULA: // 公式类型 cellValue = String.valueOf(cell.getCellFormula()); break; case BLANK: // 空白类型 cellValue = ""; break; case ERROR: cellValue = ""; break; default: cellValue = cell.toString().trim(); break; } } return cellValue.trim(); } public static Date getDate(String dateStr, String pattern) { try { return new SimpleDateFormat(pattern).parse(dateStr); } catch (ParseException e) { throw new IllegalArgumentException(e); } } private static String getDateStr(Date date, String pattern) { return new SimpleDateFormat(pattern).format(date); } }