Excel工具类分享
用于将数据写入到excel中并写回到前端.xls文件;
使用到的技术:
阿里巴巴开源的 easyExcel,官方文档: EasyExcel · 语雀 (yuque.com);
其余参考的博客: (13条消息) Java使用EasyExcel下载xls、xlsx 出现文件格式与扩展名不匹配_小肥羊的博客-CSDN博客;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.example.demo.domain.StudentVO; import org.apache.poi.ss.formula.functions.T; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class ExcelUtils { /** * 使用response,将指定集合中的数据作为excel输出 * @param response 应该传入HttpServletResponse,传入前需要先设定response的返回内容类型和返回头信息 * response.setContentType("application/vnd.ms-excel"); * response.setHeader("content-Disposition","attachment;filename=" + "输出的文件名" +".xls") * @param list 需要写到excel中的数据,List<T>中的T需要是个bean,不能使用map,否则数据写入不成功 * @param voType 将list中的封装好的bean的字节码对象发送过来,如 StudengVO.class, 如果传递有问题,可能会出现没有表头的情况; * @throws IOException 将异常抛出,一旦有问题,会将异常抛给方法的调用着; */ public static void responseExcel(HttpServletResponse response, List list, Class voType) throws Exception { //获取excelWriter对象,指定将都对应写到哪里。 ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build(); //获取sheet的索引号为0,并将其名称改为report的sheet WriteSheet sheet = EasyExcel.writerSheet(0,"report").head(voType).build(); //使用Writer对象,向sheet中写入list ExcelWriter write = excelWriter.write(list, sheet);//关闭excelWriter资源,在其中会关闭response中的流资源很重要 excelWriter.finish(); } }
参数中需要传递进去java Bean的class对象,举例:
import com.alibaba.excel.annotation.ExcelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data //lombok插件 @NoArgsConstructor @AllArgsConstructor public class StudentVO { @ExcelProperty("姓名") //在这里定义表头的名称,否则会将该bean的属性名作为该列的表头名称 private String name; @ExcelProperty("年龄") //在这里定义表头的名称,否则会将该bean的属性名作为该列的表头名称 private String age; }
Controller层代码举例:
import com.example.demo.domain.StudentVO; import com.example.demo.util.ExcelUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; @Controller public class testController { @GetMapping("/test") @ResponseBody public void test(HttpServletResponse response){ try {
// 模拟数据 List<StudentVO> list = new ArrayList<>(); StudentVO s1 = new StudentVO("张三","21"); StudentVO s2 = new StudentVO("李四","24"); list.add(s1); list.add(s2);
//设置响应体的格式 response.setContentType("application/vnd.ms-excel"); response.setHeader("content-Disposition","attachment;filename=" + "test.xls");
//调用工具类 进行写操作 ExcelUtils.responseExcel(response,list,StudentVO.class); } catch (Exception e) { e.printStackTrace(); } } }
测试所使用到了jar包的地址:
<properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- easyExcel 进行报表导出--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency> <!-- lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>

浙公网安备 33010602011771号