pom.xml
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.20</version> </dependency> <!--poi实现导入导出功能--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency>
/** * 导出接口 */ @GetMapping("/export") public void export(HttpServletResponse response) throws Exception { // 从数据库查询出所有的数据 List<User> list = userService.list(); // 通过工具类创建writer 写出到磁盘路径 // ExcelWriter writer = ExcelUtil.getWriter(filesUploadPath + "/用户信息.xlsx"); // 在内存操作,写出到浏览器 ExcelWriter writer = ExcelUtil.getWriter(true); //自定义标题别名 writer.addHeaderAlias("username", "用户名"); writer.addHeaderAlias("password", "密码"); writer.addHeaderAlias("nickname", "昵称"); writer.addHeaderAlias("email", "邮箱"); writer.addHeaderAlias("phone", "电话"); writer.addHeaderAlias("address", "地址"); writer.addHeaderAlias("createTime", "创建时间"); //writer.addHeaderAlias("avatarUrl", "头像"); // 一次性写出list内的对象到excel,使用默认样式,强制输出标题 writer.write(list, true); // 设置浏览器响应的格式 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); String fileName = URLEncoder.encode("用户信息", "UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); ServletOutputStream out = response.getOutputStream(); writer.flush(out, true); out.close(); writer.close(); } /** * excel 导入 * @param file * @throws Exception */ @PostMapping("/import") public boolean imp(MultipartFile file) throws Exception { InputStream inputStream = file.getInputStream(); ExcelReader reader = ExcelUtil.getReader(inputStream); // 方式1:(推荐) 通过 javabean的方式读取Excel内的对象,但是要求表头必须是英文,跟javabean的属性要对应起来 // List<User> list = reader.readAll(User.class); // 方式2:忽略表头的中文,直接读取表的内容 List<List<Object>> list = reader.read(1); List<User> users = CollUtil.newArrayList(); for (List<Object> row : list) { User user = new User(); user.setUsername(row.get(0).toString()); user.setPassword(row.get(1).toString()); user.setNickname(row.get(2).toString()); user.setEmail(row.get(3).toString()); user.setPhone(row.get(4).toString()); user.setAddress(row.get(5).toString()); users.add(user); } userService.saveBatch(users); return true; } /** * 下载导入excel模板 */ @RequestMapping("/downModel") public void download( ) throws IOException { ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletResponse response = requestAttributes.getResponse(); String filename = "用户信息导入模板.xlsx"; // 设置信息给客户端不解析 String type = new MimetypesFileTypeMap().getContentType(filename); // 设置contenttype,即告诉客户端所发送的数据属于什么类型 response.setHeader("Content-type",type); // 设置编码 String hehe = new String(filename.getBytes("utf-8"), "iso-8859-1"); // 设置扩展头,当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。 response.setHeader("Content-Disposition", "attachment;filename=" + hehe); FileUtil.download(filename, response); }
导入模板下载工具类:
public class FileUtil { public static void download(String filename, HttpServletResponse res) throws IOException { // 发送给客户端的数据 OutputStream outputStream = res.getOutputStream(); byte[] buff = new byte[1024]; BufferedInputStream bis = null; // 读取filename bis = new BufferedInputStream(new FileInputStream(new File("D:\\vue项目\\springboot\\file\\" + filename))); int i = bis.read(buff); while (i != -1) { outputStream.write(buff, 0, buff.length); outputStream.flush(); i = bis.read(buff); } bis.close(); outputStream.close(); } }