ToB企服应用市场:ToB评测及商务社交产业平台

标题: “easyExcel”导入的代码实现 [打印本页]

作者: 不到断气不罢休    时间: 2023-7-12 16:39
标题: “easyExcel”导入的代码实现
使用easyExcel在导入数据事有很好的使用性,方便操作。
添加依赖:
  1. <dependency>
  2.     <groupId>com.alibaba</groupId>
  3.     <artifactId>easyexcel</artifactId>
  4.     <version>3.0.5</version>
  5. </dependency>
复制代码
前端解析的文件流调用这个方法;
需要首先创建监听方法类
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Map;
  4. import java.util.Objects;
  5. import com.alibaba.excel.context.AnalysisContext;
  6. import com.alibaba.excel.event.AnalysisEventListener;
  7. import lombok.extern.slf4j.Slf4j;
  8. /**
  9. * 读取数据监听器.
  10. * 监听excel解析到的数据
  11. * @author: xiehj
  12. * Date: 2023-06-07
  13. */
  14. @Slf4j
  15. public class CommonExcelListener<T> extends AnalysisEventListener<T> {
  16.     /**存放解析到的数据,给了一个初始容量,为了避免list的频繁扩容带来的性能问题.*/
  17.     private final List<T> list = new ArrayList<>(1000);
  18.     /**解析每一行都会执行该方法.*/
  19.     @Override
  20.     public void invoke(final T data, final AnalysisContext analysisContext) {
  21.         this.list.add(data);
  22.     }
  23.     /**解析完成.*/
  24.     @Override
  25.     public void doAfterAllAnalysed(final AnalysisContext analysisContext) {
  26.     }
  27.     /**解析表头.*/
  28.     @Override
  29.     public void invokeHeadMap(final Map<Integer, String> headMap, final AnalysisContext context) {
  30.         headMap.entrySet().removeIf(h -> Objects.isNull(h.getValue()) || "".equals(h.getValue()));
  31.     }
  32.     public List<T> getList() {
  33.         return this.list;
  34.     }
  35. }
复制代码
创建utils,创建这个方法即可
  1. public String importFile(final InputStream inputStream) {
  2.         // 如果集合为空,则不用处理。
  3.         if (Objects.isNull(inputStream)) {
  4.             throw new ExtBusinessException("导入文件时,文件流异常。");
  5.         }
  6.         final CommonExcelListener<ArticleImportVo> listener = new CommonExcelListener<>();
  7.         EasyExcel.read(inputStream, ArticleImportVo.class, listener)
  8.             .headRowNumber(1)
  9.             .autoTrim(true)
  10.             .sheet(0)
  11.             .doRead();
  12.         // list即为文件流解析出的数据实体类。
  13.         final List<ArticleImportVo> list = listener.getList();
  14. }
复制代码
通过“easyExcel”导出文件代码:
  1. import java.io.IOException;
  2. import java.nio.charset.StandardCharsets;
  3. import java.util.List;
  4. import javax.annotation.Resource;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import com.alibaba.excel.EasyExcel;
  10. import com.mocha.framework.commons.log.annotation.AuditLog;
  11. import com.mocha.framework.commons.log.annotation.Language;
  12. import com.mocha.sn.business.itbussiness.service.IExportCaseService;
  13. import com.mocha.sn.business.itbussiness.vo.ArticleImportVo;
  14. import lombok.extern.slf4j.Slf4j;
  15. /**
  16. * 导出数据控制器.
  17. * Author:xiehj
  18. * Date:2023-06-12
  19. */
  20. @RestController
  21. @RequestMapping("/v1/api/it/pc/business/export")
  22. @Slf4j
  23. public class ExportCaseController {
  24.     private static final String EXCEL_TYPE = ".xlsx";
  25.     @Resource
  26.     private IExportCaseService exportCaseService;
  27.     /**
  28.      * 导出文件。
  29.      * @param response 前端响应。
  30.      */
  31.     @GetMapping("/file")
  32.     @AuditLog(operation = @Language(cn = "下载附件"))
  33.     public void downloadFile(final HttpServletResponse response) {
  34.         final List<ArticleImportVo> articleVos = exportCaseService.exportFile();
  35.         final String excelName = "导出数据";
  36.         final String fileName = new String(excelName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
  37.         response.reset();
  38.         response.setContentType("application/vnd.ms-excel");
  39.         response.setCharacterEncoding("utf-8");
  40.         response.addHeader("content-Disposition", "attachment;filename=" + fileName + EXCEL_TYPE);
  41.         try {
  42.             EasyExcel.write(response.getOutputStream(), ArticleImportVo.class)
  43.                 .autoCloseStream(Boolean.TRUE).sheet(excelName).doWrite(articleVos);
  44.         } catch (final IOException e) {
  45.             log.error("导出文件失败。", e);
  46.         }
  47.     }
  48. }
复制代码
 在此记录,方便下次使用时调用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4