easyExcel导出导入通用方法

easyExcel导出和导入通用方法

pom依赖

        <dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>2.2.10</version>
		</dependency>
		
        <dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.16</version>
		</dependency>

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.16</version>
		</dependency>

导出通用方法

开箱即用
导出效果
在这里插入图片描述

@Slf4j
public class EasyExcelExport {

    /**
     * EasyExcel输出通用
     *
     * @param response 
     * @param title
     * @param companyName
     * @param list
     * @param cla
     */
    public static void export(HttpServletResponse response, String title, String companyName, List list, Class cla) {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = null;
        try {
            fileName = URLEncoder.encode(title + companyName, "UTF-8").replaceAll("\\+", "%20");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        try {
            // 标题样式
            WriteCellStyle headWriteCellStyle = CustomWriteCellStyleUtil.getHeadStyle();
            // 内容样式
            WriteCellStyle contentWriteCellStyle = CustomWriteCellStyleUtil.getContentStyle();
            // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
            HorizontalCellStyleStrategy horizontalCellStyleStrategy =
                    new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

            EasyExcel.write(response.getOutputStream(), cla)
                    .registerWriteHandler(horizontalCellStyleStrategy)
                    .registerWriteHandler(new CustomCellWriteHandler())
                    .sheet("data").doWrite(list);
        } catch (IOException e) {
            e.printStackTrace();
            log.error("FileExportController.easyExcelExport", e);
        }
    }
}

样式工具类
1)自适应宽度

/**
 * @Title EasyExcel自适应宽度
 * @Desc
 * @Author shenlbang
 * @Date 2021/10/11 17:29
 * @Version 1.0
 **/
public class CustomCellWriteHandler extends AbstractColumnWidthStyleStrategy {

    private static final Logger LOGGER = LoggerFactory.getLogger(CustomCellWriteHandler.class);

    private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();

    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head,
            Integer relativeRowIndex, Boolean isHead) {
        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
        if (needSetWidth) {
            Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());
            if (maxColumnWidthMap == null) {
                maxColumnWidthMap = new HashMap<>();
                CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
            }
            //宽度
            Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
            if (columnWidth >= 0) {
                if (columnWidth > 150) {
                    columnWidth = 150;
                }

                Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
                    maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
                    writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
                }

            }
        }
    }

    private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {
        if (isHead) {
            return cell.getStringCellValue().getBytes().length;
        } else {
            CellData cellData = cellDataList.get(0);
            CellDataTypeEnum type = cellData.getType();
            if (type == null) {
                return -1;
            } else {
                switch (type) {
                    case STRING:
                        return cellData.getStringValue().getBytes().length;
                    case BOOLEAN:
                        return cellData.getBooleanValue().toString().getBytes().length;
                    case NUMBER:
                        return cellData.getNumberValue().toString().getBytes().length;
                    default:
                        return -1;
                }
            }
        }
    }
}

2)样式

/**
 * @Title 导出样式工具类
 * @Desc
 * @Author shenlbang
 * @Date 2021/10/11 17:29
 * @Version 1.0
 **/
public class CustomWriteCellStyleUtil {


	/**
	 * 标题样式
	 *
	 * @return com.alibaba.excel.write.metadata.style.WriteCellStyle
	 * @author v_fuxshen
	 * @date 2021-10-15 16:49:18
	 **/
	public static WriteCellStyle getHeadStyle() {
		// 头的策略
		WriteCellStyle headWriteCellStyle = new WriteCellStyle();
		// 背景颜色
		headWriteCellStyle.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
		headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);

		// 字体
		WriteFont headWriteFont = new WriteFont();
		headWriteFont.setFontName("黑体");//设置字体名字
		headWriteFont.setFontHeightInPoints((short) 14);//设置字体大小
		headWriteFont.setBold(true);//字体加粗
		headWriteFont.setColor(IndexedColors.WHITE.getIndex());//字体颜色
		headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;

		// 样式
		headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
		headWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
		headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
		headWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
		headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
		headWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
		headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
		headWriteCellStyle.setTopBorderColor((short) 0); //设置顶边框颜色;

		headWriteCellStyle.setWrapped(false);  //设置自动换行(标题不换行);

		headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对齐的样式为居中对齐;
		headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐的样式为居中对齐;

		//headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适

		return headWriteCellStyle;
	}

	/**
	 * 内容样式
	 *
	 * @return com.alibaba.excel.write.metadata.style.WriteCellStyle
	 * @author v_fuxshen
	 * @date 2021-10-15 16:49:45
	 **/
	public static WriteCellStyle getContentStyle() {
		// 内容的策略
		WriteCellStyle contentWriteCellStyle = new WriteCellStyle();

		// 背景绿色
		// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
		contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
		contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);

		// 设置字体
		WriteFont contentWriteFont = new WriteFont();
		contentWriteFont.setFontHeightInPoints((short) 14);//设置字体大小
		contentWriteFont.setFontName("宋体"); //设置字体名字
		contentWriteCellStyle.setWriteFont(contentWriteFont);//在样式用应用设置的字体;

		//设置样式;
		contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
		contentWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
		contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
		contentWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
		contentWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
		contentWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
		contentWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
		contentWriteCellStyle.setTopBorderColor((short) 0); ///设置顶边框颜色;

		contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 水平居中
		contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中
		contentWriteCellStyle.setWrapped(true); //设置自动换行;

		contentWriteCellStyle.setDataFormat((short) 49);//设置单元格格式是:文本格式,方式长数字文本科学计数法

		// contentWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适

		return contentWriteCellStyle;
	}

	/**
	 * easyExcel设置单元格格式:传一个short类型的下标,从内建格式中选择需要设置的格式
	 * <p>
	 * 防止长数字字符串自动科学计数法
	 * <p>
	 * 下面是poi内建格式:BuiltinFormats中定义的静态数组,初始化了50个格式
	 */
	private static final String[] _formats = new String[]{
			"General",
			"0",
			"0.00",
			"#,##0",
			"#,##0.00",
			"\"$\"#,##0_);(\"$\"#,##0)",
			"\"$\"#,##0_);[Red](\"$\"#,##0)",
			"\"$\"#,##0.00_);(\"$\"#,##0.00)",
			"\"$\"#,##0.00_);[Red](\"$\"#,##0.00)",
			"0%", "0.00%", "0.00E+00",
			"# ?/?", "# ??/??",
			"m/d/yy", "d-mmm-yy",
			"d-mmm", "mmm-yy",
			"h:mm AM/PM",
			"h:mm:ss AM/PM",
			"h:mm", "h:mm:ss",
			"m/d/yy h:mm",
			"reserved-0x17",
			"reserved-0x18",
			"reserved-0x19",
			"reserved-0x1A",
			"reserved-0x1B",
			"reserved-0x1C",
			"reserved-0x1D",
			"reserved-0x1E",
			"reserved-0x1F",
			"reserved-0x20",
			"reserved-0x21",
			"reserved-0x22",
			"reserved-0x23",
			"reserved-0x24",
			"#,##0_);(#,##0)",
			"#,##0_);[Red](#,##0)",
			"#,##0.00_);(#,##0.00)",
			"#,##0.00_);[Red](#,##0.00)",
			"_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)",
			"_(\"$\"* #,##0_);_(\"$\"* (#,##0);_(\"$\"* \"-\"_);_(@_)",
			"_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)",
			"_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)",
			"mm:ss",
			"[h]:mm:ss",
			"mm:ss.0",
			"##0.0E+0",
			"@" // 文本格式
	};


}

导入通用方法

工具类
package com.yq.yq.platform.utils;

/**
 * 导入工具类
 * <p>
 * 创建时间: 2023-11-29 13:59
 *
 * @author fuxshen
 * @version v1.0.0
 * @since v1.0.0
 */

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.io.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;

/**
 * 导入工具类
 * <p>
 * 创建时间: 2023-11-29 13:59
 *
 * @author fuxshen
 * @version v1.0.0
 * @since v1.0.0
 */
public class ExcelUtils {

	private final static Logger log = LoggerFactory.getLogger(ExcelUtils.class);

	private final static String EXCEL2003 = "xls";
	private final static String EXCEL2007 = "xlsx";

	/**
	 * 读取excel
	 *
	 * @param cls
	 * @param file
	 * @return java.util.List<T>
	 * @Description
	 * @author fuxshen
	 * @date 2023-11-30 13:36:12
	 **/
	public static <T> List<T> readExcel(Class<T> cls, MultipartFile file) {

		String fileName = file.getOriginalFilename();
		if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
			log.error("上传文件格式不正确");
		}
		List<T> dataList = new ArrayList<>();
		Workbook workbook = null;
		try {
			InputStream is = file.getInputStream();
			if (fileName.endsWith(EXCEL2007)) {
				workbook = new XSSFWorkbook(is);
			}
			if (fileName.endsWith(EXCEL2003)) {
				workbook = new HSSFWorkbook(is);
			}
			if (workbook != null) {
				//类映射  注解 value-->bean columns
				Map<String, List<Field>> classMap = new HashMap<>();
				List<Field> fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList());
				fields.forEach(
						field -> {
							ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
							if (annotation != null) {
								String value = annotation.value();
								if (StringUtils.isBlank(value)) {
									return;//return起到的作用和continue是相同的 语法
								}
								if (!classMap.containsKey(value)) {
									classMap.put(value, new ArrayList<>());
								}
								field.setAccessible(true);
								classMap.get(value).add(field);
							}
						}
				);
				//索引-->columns
				Map<Integer, List<Field>> reflectionMap = new HashMap<>(16);
				//默认读取第一个sheet
				Sheet sheet = workbook.getSheetAt(0);

				boolean firstRow = true;
				for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
					Row row = sheet.getRow(i);
					//首行  提取注解
					if (firstRow) {
						for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
							Cell cell = row.getCell(j);
							String cellValue = getCellValue(cell);
							if (classMap.containsKey(cellValue)) {
								reflectionMap.put(j, classMap.get(cellValue));
							}
						}
						firstRow = false;
					} else {
						//忽略空白行
						if (row == null) {
							continue;
						}
						try {
							T t = cls.newInstance();
							//判断是否为空白行
							boolean allBlank = true;
							for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
								if (reflectionMap.containsKey(j)) {
									Cell cell = row.getCell(j);
									String cellValue = getCellValue(cell);
									if (StringUtils.isNotBlank(cellValue)) {
										allBlank = false;
									}
									List<Field> fieldList = reflectionMap.get(j);
									fieldList.forEach(
											x -> {
												try {
													handleField(t, cellValue, x);
												} catch (Exception e) {
													log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e);
												}
											}
									);
								}
							}
							if (!allBlank) {
								dataList.add(t);
							} else {
								log.warn(String.format("row:%s is blank ignore!", i));
							}
						} catch (Exception e) {
							log.error(String.format("parse row:%s exception!", i), e);
						}
					}
				}
			}
		} catch (Exception e) {
			log.error(String.format("parse excel exception!"), e);
		} finally {
			if (workbook != null) {
				try {
					workbook.close();
				} catch (Exception e) {
					log.error(String.format("parse excel exception!"), e);
				}
			}
		}
		return dataList;
	}

	private static <T> void handleField(T t, String value, Field field) throws Exception {
		Class<?> type = field.getType();
		if (type == null || type == void.class || StringUtils.isBlank(value)) {
			return;
		}
		if (type == Object.class) {
			field.set(t, value);
			//数字类型
		} else if (type.getSuperclass() == null || type.getSuperclass() == Number.class) {
			if (type == int.class || type == Integer.class) {
				field.set(t, NumberUtils.toInt(value));
			} else if (type == long.class || type == Long.class) {
				field.set(t, NumberUtils.toLong(value));
			} else if (type == byte.class || type == Byte.class) {
				field.set(t, NumberUtils.toByte(value));
			} else if (type == short.class || type == Short.class) {
				field.set(t, NumberUtils.toShort(value));
			} else if (type == double.class || type == Double.class) {
				field.set(t, NumberUtils.toDouble(value));
			} else if (type == float.class || type == Float.class) {
				field.set(t, NumberUtils.toFloat(value));
			} else if (type == char.class || type == Character.class) {
				field.set(t, CharUtils.toChar(value));
			} else if (type == boolean.class) {
				field.set(t, BooleanUtils.toBoolean(value));
			} else if (type == BigDecimal.class) {
				field.set(t, new BigDecimal(value));
			}
		} else if (type == Boolean.class) {
			field.set(t, BooleanUtils.toBoolean(value));
		} else if (type == Date.class) {
			//
			field.set(t, value);
		} else if (type == String.class) {
			field.set(t, value);
		} else {
			Constructor<?> constructor = type.getConstructor(String.class);
			field.set(t, constructor.newInstance(value));
		}
	}

	private static String getCellValue(Cell cell) {
		if (cell == null) {
			return "";
		}
		if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
			if (HSSFDateUtil.isCellDateFormatted(cell)) {
				return HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
			} else {
				return new BigDecimal(cell.getNumericCellValue()).toString();
			}
		} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
			return StringUtils.trimToEmpty(cell.getStringCellValue());
		} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
			return StringUtils.trimToEmpty(cell.getCellFormula());
		} else if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
			return "";
		} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(cell.getBooleanCellValue());
		} else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) {
			return "ERROR";
		} else {
			return cell.toString().trim();
		}

	}

	private static <T> Workbook writeExcel(List<T> dataList, Class<T> cls) {
		Field[] fields = cls.getDeclaredFields();
		List<Field> fieldList = Arrays.stream(fields)
				.filter(field -> {
					ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
					if (annotation != null && annotation.col() > 0) {
						field.setAccessible(true);
						return true;
					}
					return false;
				}).sorted(Comparator.comparing(field -> {
					int col = 0;
					ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
					if (annotation != null) {
						col = annotation.col();
					}
					return col;
				})).collect(Collectors.toList());

		Workbook wb = new XSSFWorkbook();
		Sheet sheet = wb.createSheet("Sheet1");
		AtomicInteger ai = new AtomicInteger();
		{
			Row row = sheet.createRow(ai.getAndIncrement());
			AtomicInteger aj = new AtomicInteger();
			//写入头部
			fieldList.forEach(field -> {
				ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
				String columnName = "";
				if (annotation != null) {
					columnName = annotation.value();
				}
				Cell cell = row.createCell(aj.getAndIncrement());

				CellStyle cellStyle = wb.createCellStyle();
				cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
				cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
				cellStyle.setAlignment(CellStyle.ALIGN_CENTER);

				Font font = wb.createFont();
				font.setBoldweight(Font.BOLDWEIGHT_NORMAL);
				cellStyle.setFont(font);
				cell.setCellStyle(cellStyle);
				cell.setCellValue(columnName);
			});
		}
		if (CollectionUtils.isNotEmpty(dataList)) {
			dataList.forEach(t -> {
				Row row1 = sheet.createRow(ai.getAndIncrement());
				AtomicInteger aj = new AtomicInteger();
				fieldList.forEach(field -> {
					Class<?> type = field.getType();
					Object value = "";
					try {
						value = field.get(t);
					} catch (Exception e) {
						e.printStackTrace();
					}
					Cell cell = row1.createCell(aj.getAndIncrement());
					if (value != null) {
						if (type == Date.class) {
							cell.setCellValue(value.toString());
						} else {
							cell.setCellValue(value.toString());
						}
						cell.setCellValue(value.toString());
					}
				});
			});
		}
		//冻结窗格
		wb.getSheet("Sheet1").createFreezePane(0, 1, 0, 1);
		return wb;
	}

	/**
	 * 浏览器下载(导出)excel
	 *
	 * @param fileName 文件名
	 * @param response 响应
	 */
	public static <T> void buildExcelDocument(String fileName, HttpServletResponse response, List<T> dataList, Class<T> cls) {
		Workbook wb = writeExcel(dataList, cls);
		try {
			response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
			response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
			response.flushBuffer();
			wb.write(response.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 生成excel文件到本地
	 *
	 * @param path 生成excel路径
	 */
	public static <T> void buildExcelFile(String path, List<T> dataList, Class<T> cls) {
		Workbook wb = writeExcel(dataList, cls);
		File file = new File(path);
		if (file.exists()) {
			file.delete();
		}
		try {
			wb.write(new FileOutputStream(file));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
导入注解
import java.lang.annotation.*;

/**
 * 导入标识注解
 * <p>
 * 创建时间: 2023-11-30 11:13
 *
 * @author fuxshen
 * @version v1.0.0
 * @since v1.0.0
 */

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelColumn {
	/**
	 * Excel标题
	 *
	 * @author zhaomaolin
	 */
	String value() default "";

	/**
	 * Excel从左往右排列位置
	 *
	 * @author zhaomaolin
	 */
	int col() default 0;
}

在这里插入图片描述

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Spring Boot可以使用EasyExcel来实现Excel导入数据。EasyExcel是阿里基于poi开源的一个项目,它可以帮助我们更方便地实现Excel的导入导出功能。在Spring Boot中使用EasyExcel,我们可以综合应用各种Spring知识,代码量并不大。首先,在Controller层,我们可以提供一个访问接口,通过POST请求方式传入Excel文件。在请求中,我们需要将文件一同传入,并获取文件名用于后续判断是否为Excel文件。然后,我们可以调用Service层的batchImport方法进行业务逻辑处理。在Service层,我们可以使用EasyExcel提供的API来读取Excel文件中的数据,并进行相应的处理。最后,我们可以返回处理结果给前端。这样,就可以实现Spring Boot中的Excel导入数据功能。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [SpringBoot 注解 + 反射优雅的实现Excel导入导出通用加强版!](https://blog.csdn.net/afreon/article/details/126756870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringBoot提供接口实现Excel导入数据并存储到数据库中](https://blog.csdn.net/m0_51197424/article/details/124454553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenlbang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值