SpringBoot导入导出

  1. <dependency>
  2. <groupId>cn.hutool</groupId>
  3. <artifactId>hutool-all</artifactId>
  4. <version>5.3.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi</groupId>
  8. <artifactId>poi-ooxml</artifactId>
  9. <version>4.1.2</version>
  10. </dependency>

image.pngimage.png

导出Excel模版

  1. @GetMapping("/getMaterialTypeImportTemplate")
  2. public void getMaterialTypeImportStencil(HttpServletResponse response) {
  3. materialTypeService.getMaterialTypeImportTemplate(response);
  4. }
  1. @Override
  2. public void getMaterialTypeImportTemplate(HttpServletResponse response) {
  3. String name = "物料类型清单-模板.xlsx";
  4. InputStream inputStream = ResourceUtil.getStream("classpath:template/" + name);
  5. try {
  6. response.setContentType("application/octet-stream");
  7. String gbkName = new String(name.getBytes(CharsetUtil.GBK), StandardCharsets.ISO_8859_1);
  8. response.setHeader("Content-disposition", "attachment;filename=" + gbkName);
  9. response.flushBuffer();
  10. write(response, inputStream);
  11. } catch (IOException e) {
  12. throw new RuntimeException(e);
  13. }
  14. }
  15. /**
  16. * 将输入流写入response的输出流
  17. *
  18. * @param response {@link HttpServletResponse}
  19. * @param inputStream 文件输入流
  20. */
  21. private void write(HttpServletResponse response, InputStream inputStream) {
  22. // 写入response
  23. OutputStream out = null;
  24. try {
  25. out = response.getOutputStream();
  26. int len;
  27. byte[] b = new byte[1024];
  28. while ((len = inputStream.read(b)) != -1) {
  29. out.write(b, 0, len);
  30. }
  31. out.flush();
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. } finally {
  35. try {
  36. if (out != null) {
  37. out.close();
  38. }
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. }

导入Excel

  1. @PostMapping("/importMaterialType")
  2. public ResultModel<?> importMaterialType(
  3. @RequestParam("orgId") Long orgId,
  4. @RequestPart("excel") MultipartFile multipartFile) {
  5. return ResultUtil.success("成功", materialTypeService.importMaterialType(multipartFile, orgId));
  6. }
  1. @Override
  2. public boolean importMaterialType(MultipartFile multipartFile, Long orgId) {
  3. Long userId = ThreadLocalHolder.getSessionId();
  4. String originalFilename = multipartFile.getOriginalFilename();
  5. String suffix = Objects.requireNonNull(originalFilename).substring(originalFilename.lastIndexOf(".") + 1).toLowerCase(Locale.ENGLISH);
  6. if (!"xlsx".equals(suffix) && !"xls".equals(suffix)) {
  7. throw new CustomException("文件类型不合法, 需为'xlsx'或'xls'");
  8. }
  9. InputStream inputStream;
  10. try {
  11. inputStream = multipartFile.getInputStream();
  12. } catch (IOException e) {
  13. throw new RuntimeException(e);
  14. }
  15. ExcelReader reader = ExcelUtil.getReader(inputStream);
  16. reader.addHeaderAlias("一级分类", "firstTypeName");
  17. reader.addHeaderAlias("二级分类", "secondTypeName");
  18. reader.addHeaderAlias("计量单位", "materialTypeUnit");
  19. reader.addHeaderAlias("数量", "amount");
  20. List<BimMaterialTypeImportVo> list = reader.readAll(BimMaterialTypeImportVo.class);
  21. // ……
  22. }