You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
5.9 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<String> getSheetHeader(Sheet sheet, int headerIndex) {
List<java.lang.String> 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);
}
}