easyUtils
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Objects;
@Slf4j
public class EasyPoiUtils {
public static <T> ExcelImportResult<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, boolean needVerify, Class<T> pojoClass) {
if (file == null) {
log.info("导入文件为空");
return null;
}
ImportParams params = new ImportParams();
params.setTitleRows(titleRows);
params.setHeadRows(headerRows);
if (needVerify) {
params.setNeedVerify(needVerify);
}
try {
return ExcelImportUtil.importExcelMore(file.getInputStream(), pojoClass, params);
} catch (NoSuchElementException e) {
throw new RuntimeException("excel文件不能为空");
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
public static void downloadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws Exception {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
OutputStream output = response.getOutputStream();
BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);
workbook.write(bufferedOutPut);
bufferedOutPut.flush();
bufferedOutPut.close();
output.close();
}
public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) throws Exception {
defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
}
private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws Exception {
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
if (workbook != null) {
downloadExcel(fileName, response, workbook);
}
}
public static <T> ExcelImportResult<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, boolean needVerify, Class<T> pojoClass, IExcelVerifyHandler handler) {
if (file == null) {
log.info("导入文件为空");
return null;
}
ImportParams params = new ImportParams();
params.setTitleRows(titleRows);
params.setHeadRows(headerRows);
if (needVerify) {
params.setNeedVerify(needVerify);
params.setVerifyHandler(handler);
}
try {
return ExcelImportUtil.importExcelMore(file.getInputStream(), pojoClass, params);
} catch (NoSuchElementException e) {
throw new RuntimeException("excel文件不能为空");
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
public static void selectList(Workbook workbook, int firstRow, int lastRow, int firstCol, int lastCol, String[] dataArray) {
Sheet sheet = workbook.getSheetAt(0);
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(dataArray);
DataValidation validation = dvHelper.createValidation(dvConstraint, cellRangeAddressList);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
}
public static void setValid(Workbook workbook, String[] data, Integer firstRow, Integer column, Boolean valid) {
Sheet dataSheet = workbook.getSheetAt(0);
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, 500, column, column);
DataValidationHelper helper = dataSheet.getDataValidationHelper();
DataValidationConstraint constraint = buildConstraint(workbook, data);
DataValidation validation = helper.createValidation(constraint, addressList);
validation.setSuppressDropDownArrow(true);
if (valid) {
validation.setShowErrorBox(true);
validation.createErrorBox("错误提示", "非下拉项中的字典值无法导入,请勿修改");
validation.setEmptyCellAllowed(true);
validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
}
validation.setShowPromptBox(false);
validation.setEmptyCellAllowed(false);
dataSheet.addValidationData(validation);
}
public static DataValidationConstraint buildConstraint(Workbook workbook, String[] data) {
Sheet dataSheet = workbook.getSheetAt(0);
DataValidationHelper dateSheetHelper = dataSheet.getDataValidationHelper();
Arrays.stream(data).peek(po-> System.out.println(po.length()));
int sum = Arrays.stream(data).mapToInt(String::length).sum();
if (sum < 255) {
return dataSheet.getDataValidationHelper().createExplicitListConstraint(data);
}
int total = workbook.getNumberOfSheets();
Sheet validSheet;
if (total < 2) {
validSheet = workbook.createSheet("参考值");
workbook.setSheetHidden(1, true);
} else {
validSheet = workbook.getSheetAt(1);
}
Integer validIndex = 0;
boolean notFind = true;
for (int i = 0, length = data.length; i < length; i++) {
Row row = validSheet.getRow(i);
if (Objects.isNull(row)){
row = validSheet.createRow(i);
}
if (notFind){
notFind = false;
while (Objects.nonNull(row.getCell(validIndex))){
validIndex++;
}
}
row.createCell(validIndex).setCellValue(data[i]);
}
String validSheetName = validSheet.getSheetName();
String nameName = validSheetName + validIndex;
Name name = workbook.createName();
name.setNameName(nameName);
String reg = "!$%s$1:$%s$%d";
char a = 'A';
char c = (char) (a + validIndex);
String format = String.format(reg, c, c, data.length);
String formatName = validSheetName + format;
name.setRefersToFormula(formatName);
return dateSheetHelper.createFormulaListConstraint(nameName);
}
}