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

11 months ago
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 sheet0
* @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 sheet0
* @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);
}
}