推荐篇:原来阿里也对excel情有独钟

it2024-03-14  72

最近发现alibaba包下有一个excel导入导出工具类,非常好用,对于普通的场景及业务逻辑用起来非常方便。

记录一下;

位置:

该工具类在 com.alibaba包下。

<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency>

特性:

该工具类对外提供了:读取和下载excel方法。

package com.gu.alibabaexcel.utils; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcelFactory; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.handler.WriteHandler; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.List; import java.util.Objects; /** * @author Mr.Gu * @date 2020/10/21 9:16 * @function : excel工具类 **/ public class ExcelUtil<T> { /** * 读取excel数据 * @param excel excel文件 * @param cls 映射的实体类 */ public static <T> List<T> readExcel(MultipartFile excel, Class cls) throws IOException { return readExcel(excel,cls,1); } /** * 读取excel数据 * @param excel excel文件 * @param cls 映射的实体类 * @param headRowNumber 从第几行开始读 0代表从第一行开始 1为第二行 */ public static <T> List<T> readExcel(MultipartFile excel,Class cls,int headRowNumber) throws IOException { return EasyExcelFactory.read(excel.getInputStream()) .sheet() .headRowNumber(headRowNumber) .head(cls) .doReadSync(); } /** * 下载excel */ public static void download(HttpServletResponse response, Class cls, List data, String fileName, String sheetName) throws Exception { download(response, cls, data, fileName, sheetName,null); } public static void download(HttpServletResponse response, Class cls, List data, String fileName, String sheetName, WriteHandler handler) throws Exception { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx"); //表头样式 WriteCellStyle headWriteCellStyle = new WriteCellStyle(); //设置表头居中对齐 headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); //内容样式 WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); //设置内容靠左对齐 contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT); HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); ExcelWriterSheetBuilder builder = EasyExcel.write(response.getOutputStream(), cls) .excelType(ExcelTypeEnum.XLSX) .sheet(sheetName) .registerWriteHandler(horizontalCellStyleStrategy); if(Objects.nonNull(handler)){ builder.registerWriteHandler(handler); } builder.doWrite(data); } }

使用方式:

/** * 导出excel * @param response */ @GetMapping("/exportExcel") public void exportExcel(HttpServletResponse response) { List<User> userList = new ArrayList<>(); userList.add(new User(1,"张三","男",20,new BigDecimal(99.5))); userList.add(new User(2,"李四","女",30,new BigDecimal(89.5))); userList.add(new User(3,"王五","男",40,new BigDecimal(79.5))); try { ExcelUtil.download(response,User.class,userList,"学生信息","Sheet1"); } catch (Exception e) { e.printStackTrace(); } } /** * 导入excel * @param file * @return */ @PostMapping("/import") public String importExcel(@RequestBody MultipartFile file) { if (file != null) { try { List<User> objectList = ExcelUtil.readExcel(file, User.class,0); System.out.println(objectList); } catch (IOException e) { e.printStackTrace(); } } return "成功"; }

注:导入和导出时使用到的User实体类而不是普通的实体类,需要添加该包下的注解,才可在导入或导出的时候和excel中的列映射;

import com.alibaba.excel.annotation.ExcelProperty; import java.math.BigDecimal; /** * @author Mr.Gu * @date 2020/10/21 9:20 * @function : **/ public class User { @ExcelProperty(value = "编号",index = 0) private Integer number; @ExcelProperty(value = "姓名",index = 1) private String name; @ExcelProperty(value = "性别",index = 2) private String sex; @ExcelProperty(value = "年龄",index = 3) private Integer age; @ExcelProperty(value = "分数",index = 4) private BigDecimal score; //getter/setter方法

最后,使用该工具类导出的excel如下: 非常简单,好用的一个excel工具类。记录完成。


公众号:沉默木头人

:沉默木头人(ID:qq_44322555)

喜欢感兴趣长按下面二维码关注吧!

原创不易,不喜勿喷,如果能够帮助到你或对你有所启发欢迎下方留言。

喜欢就开始你无情的三连击:点赞、分享、关注。这将是我写作更多有趣有益有知的好文章的动力;

最新回复(0)